用.net导出Yahoo的地址簿
直接上代码:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
namespace Yahoo
{
public class YahooExtract
{
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";
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 First = items[0];
string Last = items[2];
string NickName = items[3];
string email = items[4];
if (!string.IsNullOrEmpty(email)) //&& !string.IsNullOrEmpty(name)
{
email = email.Trim('\"');
if (!email.Equals("Email")) //&& !name.Equals("Nickname")
{
MailContact mailContact = new MailContact();
mailContact.FirstName = First.Trim('\"');
mailContact.LastName = Last.Trim('\"');
mailContact.NickName = NickName.Trim('\"');
mailContact.Email = email;
list.Add(mailContact);
}
}
}
result = true;
}
catch
{
}
return result;
}
}
public class MailContact
{
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public string Email
{
get;
set;
}
public string NickName
{
get;
set;
}
}
public class MailContactList : List<MailContact>
{
}
}
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
namespace Yahoo
{
public class YahooExtract
{
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";
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 First = items[0];
string Last = items[2];
string NickName = items[3];
string email = items[4];
if (!string.IsNullOrEmpty(email)) //&& !string.IsNullOrEmpty(name)
{
email = email.Trim('\"');
if (!email.Equals("Email")) //&& !name.Equals("Nickname")
{
MailContact mailContact = new MailContact();
mailContact.FirstName = First.Trim('\"');
mailContact.LastName = Last.Trim('\"');
mailContact.NickName = NickName.Trim('\"');
mailContact.Email = email;
list.Add(mailContact);
}
}
}
result = true;
}
catch
{
}
return result;
}
}
public class MailContact
{
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public string Email
{
get;
set;
}
public string NickName
{
get;
set;
}
}
public class MailContactList : List<MailContact>
{
}
}
测试:
YahooExtract yhe = new YahooExtract();
NetworkCredential credential = new NetworkCredential(user,pwd);
MailContactList list = new MailContactList();
Console.WriteLine(yhe.Extract(credential, out list).ToString());
//i = 1
for (int i = 1; i < list.Count; i++)
{
Console.WriteLine(list[i].FirstName + list[i].LastName );
}
Console.WriteLine(list.Count.ToString());
Console.ReadKey();
可以到DataTable:
public static DataTable ConvertCSVIntoDataTable(string strCSV)
{
DataTable table;
try
{
Stream s = new MemoryStream(Encoding.UTF8.GetBytes(strCSV));
DataTable table2 = new DataTable();
using (CSVReader reader = new CSVReader(s))
{
string[] cSVLine = reader.GetCSVLine();
foreach (string str in cSVLine)
{
table2.Columns.Add(str);
}
while ((cSVLine = reader.GetCSVLine()) != null)
{
DataRow row = table2.NewRow();
row.ItemArray = cSVLine;
table2.Rows.Add(row);
}
}
table = table2;
}
catch (Exception exception)
{
throw exception;
}
return table;
}