php 获取gmail/yahoo 联系人地址
程序员文章站
2024-01-09 20:28:52
...
gmail:
<?php error_reporting(E_ALL); $user = "****@gmail.com"; $password = "****"; // ref: http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html // step 1: login $login_url = "https://www.google.com/accounts/ClientLogin"; $fields = array( 'Email' => $user, 'Passwd' => $password, 'service' => 'cp', // <== contact list service code 'source' => 'test-google-contact-grabber', 'accountType' => 'GOOGLE', ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL,$login_url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS,$fields); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); $returns = array(); foreach (explode("\n",$result) as $line) { $line = trim($line); if (!$line) continue; list($k,$v) = explode("=",$line,2); $returns[$k] = $v; } curl_close($curl); // step 2: grab the contact list $feed_url = "http://www.google.com/m8/feeds/contacts/$user/full?alt=json&max-results=250"; $header = array( 'Authorization: GoogleLogin auth=' . $returns['Auth'], ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $feed_url); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); curl_close($curl); $data = json_decode($result); $contacts = array(); foreach ($data->feed->entry as $entry) { $contact = new stdClass(); $contact->title = $entry->title->{'$t'}; $contact->email = $entry->{'gd$email'}[0]->address; $contacts[] = $contact; } var_dump($contacts);
yahoo:
<? require_once('class.GrabYahoo.php'); // Yahoo! Account Username $login = "****@yahoo.com"; // Yahoo! Account Password $password = "****"; // Initializing Class $yahoo = new GrabYahoo; /* Setting the desired Service 1. addressbook => Used to grab Yahoo! Address Book 2. messenger => Used to grab Yahoo! Messenger List 3. newmail => Used to grab number of new Yahoo! mails 4. calendar => Used to grab Yahoo! Calendar entries */ $yahoo->service = "addressbook"; /* Set to true if HTTP proxy is required to browse net - Setting it to true will require to provide Proxy Host Name and Port number */ $yahoo->isUsingProxy = false; // Set the Proxy Host Name, isUsingProxy is set to true $yahoo->proxyHost = ""; // Set the Proxy Port Number $yahoo->proxyPort = ""; // Set the location to save the Cookie Jar File $yahoo->cookieJarPath = "./"; /* Execute the Service - Require to pass Yahoo! Account Username and Password */ $yahooList = $yahoo->execService($login, $password); // Printing the array generated by the Class dump($yahooList); /* Printing new mail status - True (1) if there is new mail(s) - False (0) if there is no new mail */ //$newMailStatus = $yahoo->getNewMailStatus(); //echo $newMailStatus; // Use this line to figure out any error generated during the process echo $yahoo->errorInfo; function dump($var) { echo "<pre>"; print_r($var); echo "</pre>"; } ?>
class.GrabYahoo.php
<?php /*------------------------------------------------------ GrabYahoo - Yahoo Service Grabber class Version 1.5, Created 05/22/2006, Updated 11/03/2010 Credit for latest fix: Ovidiu This class is used to grab Yahoo services like Address Book, Messenger List, Number of New Mails Copyright (C) 2006 Ehsan Haque License: GPL ------------------------------------------------------*/ /** * GrabYahoo - Yahoo Service Grabber class * @package GrabYahoo * @license GPL * @copyright (C) 2006 Ehsan Haque * @version 1.4 * @created 05/22/2006 * @updated 02/06/2008 * @author Ehsan Haque */ class GrabYahoo { /*------------------------------------------------------- Public Variables -------------------------------------------------------*/ /** * Service name (1. addressbook, 2. messenger, 3. newmail, 4. calendar) * @public * @var string */ var $service = ""; /** * Yahoo! Account Username * @public * @var string */ var $login = ""; /** * Yahoo! Account Password * @public * @var string */ var $password = ""; /** * Abosolute path to save the cookie * Default value is DOCUMENT_ROOT * @public * @var string */ var $cookieJarPath = ""; /** * Abosulte path to the CA Bundle file * SSL Certificate required to verify CA cert * Usually required when script ran on Localhost * Remote servers may not require * Default value is false * @public * @var string */ var $caBundleFile = ""; /** * Specifies if Proxy server required as Gateaway * Default value is false * @public * @var boolean */ var $isUsingProxy = false; /** * Proxy host name * @public * @var string */ var $proxyHost = ""; /** * Proxy port number * @public * @var int */ var $proxyPort = 0; /*------------------------------------------------------- Private Variables -------------------------------------------------------*/ /** * URL to Authenticate user on Yahoo! * @private * @var string */ var $authUrl = "http://login.yahoo.com/config/login?"; /** * URL for the desired Service * @private * @var string */ var $serviceUrl = ""; /** * URL to be used by cURL * @private * @var string */ var $url = ""; /** * User agent (used to trick Yahoo!) * @private * @var string */ var $userAgent = "YahooSeeker-Testing/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http://search.yahoo.com/)"; /** * Referer URL (used to trick Yahoo!) * @private * @var string */ var $referer = "http://my.yahoo.com"; /** * Specifies whether output includes the header * @private * @var int */ var $showHeader = 0; /** * Specifies if cURL should follow the redirected URL * @private * @var int */ var $follow = 0; /** * Specifies number of post fields to pass * @private * @var int */ var $numPostField = 0; /** * Specify fields to send via POST method as key=value * @private * @var string */ var $postFields = ""; /** * File where output is temporarily saved during authentication * @private * @var string */ var $authOutputFile = ""; /** * Variable used by Yahoo to verify the request is valid * @private * @var string */ var $crumb = ""; /** * File where service output is temporarily saved * @private * @var string */ var $outputFile = ""; /** * File where Cookie is temporarily saved * @private * @var string */ var $cookieFileJar = ""; /** * Cookie File that is read by service process * This carries same value as $cookieFileJar * @private * @var string */ var $cookieFile = ""; /** * Specifies if Cookie is to be in header * @private * @var int */ var $cookie = 0; /** * Proxy address as proxy.host:port * @private * @var string */ var $proxy = ""; /** * Error Information set by either cURL or Internal process * @private * @var string */ var $errorInfo = ""; /** * Returns true if there is new mail otherwise false * @private * @var boolean */ var $newMailStatus = false; /** * Sets Service URL * @return void */ function setServiceUrl() { if (empty($this->service)) { $this->setError("provide_service"); return false; } // Sets the URL depending on the choosen service switch ($this->service) { //updated by ovidiuw3b case 'addressbook' : $this->serviceUrl = "http://address.mail.yahoo.com/?_src=&VPC=print"; break; //end update //updated by ovidiuw3b case 'messenger' : $this->serviceUrl = "http://address.mail.yahoo.com/?_src=&VPC=print"; break; //end update case 'newmail' : $this->serviceUrl = "http://mail.yahoo.com/"; break; case 'calendar' : $this->serviceUrl = "http://calendar.yahoo.com/"; break; } } /** * Sets the Cookie Jar File where Cookie is temporarily saved * @return void */ function setCookieJar() { // Sets the encrypted cookie filename using Yahoo! account username $this->cookieFilename = MD5($this->login); // Sets the Cookie Jar filename with an absolute path $this->cookieFileJar = (!empty($this->cookieJarPath)) ? $this->cookieJarPath . "/" . $this->cookieFilename : $_SERVER['DOCUMENT_ROOT'] . "/" . $this->cookieFilename; fopen($this->cookieFileJar, "w"); } /** * Initializes cURL session * @return void */ function initCurl() { $this->curlSession = curl_init(); } /** * Sets cURL options * @return boolean */ function setCurlOption() { // Sets the User Agent curl_setopt($this->curlSession, CURLOPT_USERAGENT, $this->userAgent); // Sets the HTTP Referer curl_setopt($this->curlSession, CURLOPT_REFERER, $this->referer); // Sets the URL that PHP will fetch using cURL curl_setopt($this->curlSession, CURLOPT_URL, $this->url); // Sets the number of fields to be passed via HTTP POST curl_setopt($this->curlSession, CURLOPT_POST, $this->numPostField); // Sets the fields to be sent via HTTP POST as key=value curl_setopt($this->curlSession, CURLOPT_POSTFIELDS, $this->postFields); // Sets the filename where cookie information will be saved curl_setopt($this->curlSession, CURLOPT_COOKIEJAR, $this->cookieFileJar); // Sets the filename where cookie information will be looked up curl_setopt($this->curlSession, CURLOPT_COOKIEFILE, $this->cookieFile); // Sets the option to set Cookie into HTTP header curl_setopt($this->curlSession, CURLOPT_COOKIE, $this->cookie); // Checks if the user needs proxy (to be set by user) if ($this->isUsingProxy) { // Checks if the proxy host and port is specified if ((empty($this->proxyHost)) || (empty($this->proxyPort))) { $this->setError("proxy_required"); $this->unlinkFile($this->cookieFileJar); return false; } // Sets the proxy address as proxy.host:port $this->proxy = $this->proxyHost . ":" . $this->proxyPort; } // Sets the proxy server as proxy.host:port curl_setopt($this->curlSession, CURLOPT_PROXY, $this->proxy); // Sets the filename where output will be temporarily saved curl_setopt($this->curlSession, CURLOPT_RETURNTRANSFER, 1); curl_setopt($this->curlSession, CURLOPT_FOLLOWLOCATION, $this->follow); return true; } /** * Executes the Service * @param string $login Username of user's Yahoo! Account * @param string $password Password of the user's Yahoo! Account * @return array|false */ function execService($login, $password) { $login = trim($login); $password = trim($password); if (empty($login)) { $this->setError("provide_login"); return false; } if (empty($password)) { $this->setError("provide_pass"); return false; } $this->login = $login; $this->password = $password; $this->setServiceUrl(); // Instructs to authenticate user on Yahoo! $this->auth = $this->doAuthentication(); if ($this->auth) { // Instructs to fetch output if Authenticated $this->getServiceOutput(); return $this->serviceOutput; } } /** * Authenticates user on Yahoo! * @return boolean */ function doAuthentication() { // Instructs to initialize cURL session $this->initCurl(); // Sets the URL for authentication purpose $this->url = $this->authUrl; // Sets the number of fields to send via HTTP POST $this->numPostField = 22; // Sets the fields to be sent via HTTP POST as key=value $this->postFields = "login=$this->login&passwd=$this->password&.src=&.tries=5&.bypass=&.partner=&.md5=&.hash=&.intl=us&.tries=1&.challenge=ydKtXwwZarNeRMeAufKa56.oJqaO&.u=dmvmk8p231bpr&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.v=0&.chkP=N&.last=&.done=" . $this->serviceUrl; // Instructs to set Cookie Jar $this->setCookieJar(); // Checks if the cURL options are all set properly if ($this->setCurlOption()) { // Instructs to execute cURL session $this->execCurl(); // Checks if any cURL error is generated if ($this->getCurlError()) { $this->unlinkFile($this->cookieFileJar); $this->setError("curl_error"); return false; } // Checks if the authentication failed, either invalid login or username is not registered if ((preg_match("/invalid/i", $this->outputContent)) || (preg_match("/not yet taken/i", $this->outputContent))) { // Instructs to close cURL session $this->closeCurl(); // Unlinks the cookie file $this->unlinkFile($this->cookieFileJar); $this->setError("invalid_login"); return false; } $this->closeCurl(); } unset($this->outputContent); return true; } /** * Sets the Service Output * @return void */ function getServiceOutput() { // Instructs to process the choosen service switch ($this->service) { case 'addressbook' : $this->showHeader = 0; $this->getCrumb(); $this->serviceOutput = $this->processAddressBook(); break; case 'messenger' : $this->showHeader = 0; $this->getCrumb(); $this->serviceOutput = $this->processMessengerList(); break; case 'newmail' : $this->showHeader = 0; $this->follow = 1; $this->serviceOutput = $this->processNewMail(); break; case 'calendar' : $this->showHeader = 0; $this->serviceOutput = $this->processCalendar(); break; } $this->unlinkFile($this->cookieFileJar); } /** * Processes Yahoo! Address Book * @return array|false */ function processAddressBook() { $this->initCurl(); $this->url = $this->serviceUrl; $this->numPostField = 1; //updated by ovidiuw3b $this->postFields = "VPC=print&field[allc]=1&field[catid]=0&field[style]=>detailed&submit[action_display]=Display for Printing"; //end update $this->cookieFile = $this->cookieFileJar; $this->outputFile = "addressBook." . md5($this->login) . ".txt"; $this->fileHandler = fopen($this->outputFile, "w"); if ($this->setCurlOption()) { $this->execCurl(); $res=$this->outputContent; $this->closeCurl(); $emailA=array();$bulk=array();$contacts=array(); $res=str_replace(array(' ',' ',PHP_EOL,"\n","\r\n"),array('','','','',''),$res); preg_match_all("#\<tr class\=\"phead\"\>\<td colspan\=\"2\"\>(.+)\<\/tr\>(.+)\<div class\=\"first\"\>\<\/div\>\<div\>\<\/div\>(.+)\<\/div\>#U",$res,$bulk); if (!empty($bulk)) { foreach($bulk[1] as $key=>$bulkName) { $nameFormated=trim(strip_tags($bulkName)); if (preg_match('/\ \;\-\ \;/',$nameFormated)) { $emailA=explode(' - ',$nameFormated); if (!empty($emailA[1])) $contacts[$emailA[1].'@yahoo.com']=array('first_name'=>$emailA[0],'email_1'=>$emailA[1].'@yahoo.com'); } elseif (!empty($bulk[3][$key])) { $email=strip_tags(trim($bulk[3][$key])); $contacts[$email]=array('first_name'=>$nameFormated,'email_1'=>$email); } } } foreach ($contacts as $email=>$name) if (!$this->isEmail($email)) unset($contacts[$email]); return $contacts; } } /** * Locates and sets the value for crumb * @return void */ function getCrumb() { $this->initCurl(); $this->url = $this->serviceUrl . "?1&VPC=import_export&.rand=1238474830"; $this->cookieFile = $this->cookieFileJar; $this->outputFile = "addressBook." . md5($this->login) . ".txt"; $this->fileHandler = fopen($this->outputFile, "w"); if ($this->setCurlOption()) { $this->execCurl(); fwrite($this->fileHandler, $this->outputContent); unset($this->outputContent); $this->closeCurl(); fclose($this->fileHandler); $fileContent = file_get_contents($this->outputFile); $searchStr = "/\.crumb.*\"/"; preg_match($searchStr, $fileContent, $matches); if (!empty($matches)) { $foundStr = $matches[0]; $pattern = array ( '/id/', '/(\.?)crumb(\d?)/', '/value/', '/=/', '/\"/' ); $replacement = array ( '', '', '', '', '' ); $this->crumb = preg_replace($pattern, $replacement, $foundStr); } $this->unlinkFile($this->outputFile); } } /** * Processes Yahoo! Messenger Friend List (Grouped) * @return array|false */ function processMessengerList() { $this->initCurl(); $this->url = $this->serviceUrl; $this->numPostField = 1; //updated by ovidiuw3b $this->postFields = "VPC=print&field[allc]=1&field[catid]=0&field[style]=>detailed&submit[action_display]=Display for Printing"; //end update $this->cookieFile = $this->cookieFileJar; $this->outputFile = "addressBook." . md5($this->login) . ".txt"; $this->fileHandler = fopen($this->outputFile, "w"); if ($this->setCurlOption()) { $this->execCurl(); $res=$this->outputContent; $this->closeCurl(); $emailA=array();$bulk=array();$contacts=array(); $res=str_replace(array(' ',' ',PHP_EOL,"\n","\r\n"),array('','','','',''),$res); preg_match_all("#\<tr class\=\"phead\"\>\<td colspan\=\"2\"\>(.+)\<\/tr\>(.+)\<div class\=\"first\"\>\<\/div\>\<div\>\<\/div\>(.+)\<\/div\>#U",$res,$bulk); if (!empty($bulk)) { foreach($bulk[1] as $key=>$bulkName) { $nameFormated=trim(strip_tags($bulkName)); if (preg_match('/\ \;\-\ \;/',$nameFormated)) { $emailA=explode(' - ',$nameFormated); if (!empty($emailA[1])) $contacts[$emailA[1].'@yahoo.com']=array('first_name'=>$emailA[0],'messenger_id'=>$emailA[1]); } elseif (!empty($bulk[3][$key])) { $email=strip_tags(trim($bulk[3][$key])); $contacts[$email]=array('first_name'=>$nameFormated,'messenger_id'=>$email); } } } foreach ($contacts as $email=>$name) if (!$this->isEmail($email)) unset($contacts[$email]); return $contacts; } } /** * Processes Yahoo! Mail for Number of New Messages * @return array|false */ function processNewMail() { $this->initCurl(); $this->url = $this->serviceUrl; $this->cookieFile = $this->cookieFileJar; $this->outputFile = "newMailList." . md5($this->login) . ".txt"; $this->fileHandler = fopen($this->outputFile, "w"); if ($this->setCurlOption()) { $this->execCurl(); fwrite($this->fileHandler, $this->outputContent); unset($this->outputContent); $this->closeCurl(); fclose($this->fileHandler); $fileContent = file_get_contents($this->outputFile); $fileContent = strip_tags($fileContent); // Finds out the string You have N unread Message $pattern = "/inbox\s\(\d+\)/i"; preg_match($pattern, $fileContent, $match); // Extracts the number of new message(s) $numPattern = "/\d+/"; preg_match($numPattern, $match[0], $match); $list['new_mail'] = $match[0]; $this->unlinkFile($this->outputFile); if ($match[0] > 0) { $this->setNewMailStatus(true); } return $list; } } /** * Processes Yahoo! Calendar * @return array|false */ function processCalendar() { $this->initCurl(); $this->url = $this->serviceUrl; $this->url .= "YYY,dbadeb/srt,0/Yahoo.csv?v=12&Yahoo.csv"; $this->cookieFile = $this->cookieFileJar; $this->outputFile = "calendar." . md5($this->login) . ".txt"; $this->fileHandler = fopen($this->outputFile, "w"); if ($this->setCurlOption()) { $this->execCurl(); fwrite($this->fileHandler, $this->outputContent); unset($this->outputContent); $this->closeCurl(); fclose($this->fileHandler); // Sets the service output as a string $fileContent = file_get_contents($this->outputFile); // Sets patterns and respective replacement strings to convert the output to a proper CSV format $pattern = array ( "/;\"\"\"/", "/;\"\"/", "/\"\"/", "/;\":\"/", "/;/" ); $replacement = array ( ";\"\"|\"", ";\":\"", "\"|\"", ";\"\"", "," ); $fileContent = preg_replace($pattern, $replacement, $fileContent); // Sets the formatted output as an array $fileContentArr = explode("|", $fileContent); // Sets the calendar column headings $clColumnHeadLine = trim($fileContentArr[0]); $clColumnHeadLine = str_replace("\"", "", $clColumnHeadLine); // Sets the calendar column headings into an array $clColumnHeadArr = explode(",", $clColumnHeadLine); // Unsets the heading line from the file content array unset($fileContentArr[0]); foreach ($fileContentArr as $key => $value) { // Sets the calendar list individually $listColumnLine = trim($value); $listColumnLine = str_replace("\"", "", $listColumnLine); // Sets the individual list into an array $listColumnArr = explode(",", $listColumnLine); // Iterates through each item of individual calendar item in the list foreach ($listColumnArr as $listColumnKey => $listColumnValue) { // Sets the column heading as key $listKey = $clColumnHeadArr[$listColumnKey]; // Sets the value for the key respectively $list_[$listKey] = $listColumnValue; } // Sets the calendar list in an array $list[] = $list_; } $this->unlinkFile($this->outputFile); return $list; } } /** * Sets the new mail status to true or false * @return void */ function setNewMailStatus($status) { $this->newMailStatus = ($status) ? true : false; } /** * Returns the new mail status * @return boolean */ function getNewMailStatus() { return $this->newMailStatus; } /** * Executes cURL Session * @return void */ function execCurl() { $this->outputContent = curl_exec($this->curlSession); } /** * Closes cURL session * @return void */ function closeCurl() { curl_close($this->curlSession); unset($this->curlSession); } /** * Unlinks any given file * @return void */ function unlinkFile($fileToUnlink) { if (file_exists($fileToUnlink)) { unlink($fileToUnlink); } } /** * Sets any cURL error generated * @return boolean */ function getCurlError() { $this->curlError = curl_error($this->curlSession); return (!empty($this->curlError)) ? true : false; } /** * Sets Error Information * @return void */ function setError($error) { $msg = (!empty($error)) ? $this->getErrorInfo($error) : null; $this->errorCount++; $this->errorInfo = $msg; } /** * Provides the Error message * @param string $error Error code for which error message is generated * @return string */ function getErrorInfo($error) { switch ($error) { case 'provide_service' : $msg = "Must specify a Service"; break; case 'provide_login' : $msg = "Must provide Login name"; break; case 'provide_pass' : $msg = "Must provide Password"; break; case 'provide_ca' : $msg = "Must provide a SSL Certificate to verfiy CA cert"; break; case 'proxy_required' : $msg = "Must provide both Proxy host and port"; break; case 'invalid_login' : $msg = "Login information incorrect"; break; case 'curl_error' : $msg = $this->curlError; break; } return $msg; } /*added by ovidiuw3b*/ function isEmail($email) { return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", $email); } /*end code added by ovidiuw3b*/ } ?>
其实他们都有api可以使用,参考如下:
gmail:
http://www.9lessons.info/2011/06/import-gmail-contacts-google-oauth.html
yahoo:
http://developer.yahoo.com/addressbook/
http://developer.yahoo.com/blogs/ydn/posts/2008/09/getting_started/
上一篇: 什么是软文推广?如何正确认识软文营销?