2013-01-02 30 views
0

我是Android應用程序的發佈者。檢索網站上的電子郵件地址

我的網站需要自動檢索Android應用程序數據,但Google Play不支持iTunes Store等API系統。因此,我需要製作一個有助於檢索Android數據的PHP命令。我需要獲取標題,應用圖片,說明和電子郵件地址。

首先,當我知道Google Play URL地址時,我試圖獲取電子郵件地址。這是我做的例子。這是華爾街日報的應用程序。

華爾街日報Android應用程序URL - https://play.google.com/store/apps/details?id=wsj.reader_sp

<a href="mailto:[email protected]" rel="nofollow">Email Developer</a> 

當我點擊的網站,我可以找到HTML代碼像上面。

$Google_Play_URL = 'https://play.google.com/store/apps/details?id=wsj.reader_sp'; 
$string = file_get_contents($Google_Play_URL); 

$parsing = new SimpleXmlElement($string); 
$attrs = (array)$parsing->attributes(); 
$mail = str_replace('mailto:','',$attrs['href']); 
if(filter_var($mail,FILTER_VALIATE_MAIL)) 
{ 
    echo $mail; 
} 

結果應該是「[email protected]」,但它失敗了。你能看到問題嗎?謝謝。

+1

嘗試'print_r'或變量(例如'$ attrs')上的'var_dump'並查看你是否得到你所期望的。 – Passerby

+2

「FILTER_VALIATE_MAIL」應該是「FILTER_VALIDATE_EMAIL」 – Nick

+0

那個url返回一個html頁面,你正在填入simplexml。這意味着你正試圖檢索xml根節點的屬性,這是** NOT **將包含一個電子郵件地址。 –

回答

3

你可以做到這一點使用PHP DOMDocument,如:

$Google_Play_URL = 'https://play.google.com/store/apps/details?id=wsj.reader_sp'; 
$string = file_get_contents($Google_Play_URL); 

$dom = new DOMDocument(); 
$dom->loadHTML($string); 
$anchors = $dom->getElementsByTagName('a'); 

foreach ($anchors as $anchor) { 
    if ($anchor->nodeValue === 'Email Developer') { 
     $email = str_replace('mailto:', '', $anchor->getAttribute('href')); 

     if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      echo $email; 
     } 
    } 
} 

實例爲你輸出提供的將是網址:[email protected]

+0

我會檢查HREF是否包含'mailto:'而不是檢查nodeValue,因爲如果Google更改鏈接文本,Google喜歡更改佈局,否則它將不太容易中斷。 = o) –

+0

史蒂芬法利這一個工程,但它是一個錯誤。遇到PHP錯誤 嚴重性:警告 消息:DOMDocument :: loadHTML():htmlParseEntityRef:expected';'在實體,行:34 文件名:管理/ db_advertisers.php 行號:;'末117 – Jake

+0

@Jake這如果HTML有一個像'' 實體和存在丟失的'只會發生。您可以通過將'$ dom-> loadHTML($ string);'改爲'@ $ dom-> loadHTML($ string);'來禁止警告,並且警告將被取消。 – PhearOfRayne

1

使用正則表達式來匹配電子郵件地址。此外,您在過濾器名稱中存在拼寫錯誤。

試試這個:

$Google_Play_URL = 'https://play.google.com/store/apps/details?id=wsj.reader_sp'; 
$string = file_get_contents($Google_Play_URL); 

preg_match('/<a href="mailto\:(.*)" rel="nofollow">Email Developer<\/a>/s', $string, $matches); 
if (count($matches) > 0 && filter_var($matches[1], FILTER_VALIDATE_MAIL)) 
{ 
    echo $matches[1]; 
}