⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yahooextract.cs

📁 .net 获取msn联系人名单(转载) windows ApI
💻 CS
字号:
//Code by Gnilly (http://gnillydev.blogspot.com)
//Offical site: http://opencontacts.sourceforge.net

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU Lesser General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Lesser General Public License for more details.

//You should have received a copy of the GNU Lesser General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace OpenContactsNet
{
    public class YahooExtract : IMailContactExtract
    {
        private const string _addressBookUrl = "http://address.yahoo.com/yab/us/Yahoo_ab.csv?loc=us&.rand=1671497644&A=H&Yahoo_ab.csv";
        private const string _authUrl = "https://login.yahoo.com/config/login?";
        private const string _loginPage = "https://login.yahoo.com/config/login";
        private const string _userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3";

        #region IMailContactExtract Members

        public bool Extract( NetworkCredential credential, out MailContactList list )
        {
            bool result = false;

            list = new MailContactList();

            try
            {
                WebClient webClient = new WebClient();
                webClient.Headers[ HttpRequestHeader.UserAgent ] = _userAgent;
                webClient.Encoding = Encoding.UTF8;

                byte[] firstResponse = webClient.DownloadData( _loginPage );
                string firstRes = Encoding.UTF8.GetString( firstResponse );


                NameValueCollection postToLogin = new NameValueCollection();
                Regex regex = new Regex( "type=\"hidden\" name=\"(.*?)\" value=\"(.*?)\"", RegexOptions.IgnoreCase );
                Match match = regex.Match( firstRes );
                while ( match.Success )
                {
                    if ( match.Groups[ 0 ].Value.Length > 0 )
                    {
                        postToLogin.Add( match.Groups[ 1 ].Value, match.Groups[ 2 ].Value );
                    }
                    match = regex.Match( firstRes, match.Index + match.Length );
                }


                postToLogin.Add( ".save", "Sign In" );
                postToLogin.Add( ".persistent", "y" );

                string login = credential.UserName.Split( '@' )[ 0 ];
                postToLogin.Add( "login", login );
                postToLogin.Add( "passwd", credential.Password );

                webClient.Headers[ HttpRequestHeader.UserAgent ] = _userAgent;
                webClient.Headers[ HttpRequestHeader.Referer ] = _loginPage;
                webClient.Encoding = Encoding.UTF8;
                webClient.Headers[ HttpRequestHeader.Cookie ] = webClient.ResponseHeaders[ HttpResponseHeader.SetCookie ];

                webClient.UploadValues( _authUrl, postToLogin );
                string cookie = webClient.ResponseHeaders[ HttpResponseHeader.SetCookie ];

                if ( string.IsNullOrEmpty( cookie ) )
                {
                    return false;
                }

                string newCookie = string.Empty;
                string[] tmp1 = cookie.Split( ',' );
                foreach ( string var in tmp1 )
                {
                    string[] tmp2 = var.Split( ';' );
                    newCookie = String.IsNullOrEmpty( newCookie ) ? tmp2[ 0 ] : newCookie + ";" + tmp2[ 0 ];
                }

                // set login cookie
                webClient.Headers[ HttpRequestHeader.Cookie ] = newCookie;
                byte[] thirdResponse = webClient.DownloadData( _addressBookUrl );
                string thirdRes = Encoding.UTF8.GetString( thirdResponse );

                string crumb = string.Empty;
                Regex regexCrumb = new Regex( "type=\"hidden\" name=\"\\.crumb\" id=\"crumb1\" value=\"(.*?)\"", RegexOptions.IgnoreCase );
                match = regexCrumb.Match( thirdRes );
                if ( match.Success && match.Groups[ 0 ].Value.Length > 0 )
                {
                    crumb = match.Groups[ 1 ].Value;
                }


                NameValueCollection postDataAB = new NameValueCollection();
                postDataAB.Add( ".crumb", crumb );
                postDataAB.Add( "vcp", "import_export" );
                postDataAB.Add( "submit[action_export_yahoo]", "Export Now" );

                webClient.Headers[ HttpRequestHeader.UserAgent ] = _userAgent;
                webClient.Headers[ HttpRequestHeader.Referer ] = _addressBookUrl;

                byte[] FourResponse = webClient.UploadValues( _addressBookUrl, postDataAB );
                string csvData = Encoding.UTF8.GetString( FourResponse );

                string[] lines = csvData.Split( '\n' );
                foreach ( string line in lines )
                {
                    string[] items = line.Split( ',' );
                    if ( items.Length < 5 )
                    {
                        continue;
                    }
                    string email = items[ 4 ];
                    string name = items[ 3 ];
                    if ( !string.IsNullOrEmpty( email ) && !string.IsNullOrEmpty( name ) )
                    {
                        email = email.Trim( '\"' );
                        name = name.Trim( '\"' );
                        if ( !email.Equals( "Email" ) && !name.Equals( "Nickname" ) )
                        {
                            MailContact mailContact = new MailContact();
                            mailContact.Name = name;
                            mailContact.Email = email;
                            list.Add( mailContact );
                        }
                    }
                }

                result = true;
            }
            catch
            {
            }
            return result;
        }

        #endregion
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -