2012-11-02 28 views
0

我創建了一個腳本,它檢索數據從Delicious這樣的:檢索美味的JSON數據通過標籤捲曲報價

...retrieve usernames and such... 

$username = 'randomUser'; 
$parentTag = array("tag'12","tag’12"); //note the different quotes being used! 
$amount = 100; 

foreach ($parentTag as $pTag){ 
    $url = "http://feeds.delicious.com/v2/json/".$username."/".$pTag."?count=".$amount;  
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_exec($ch); 
    curl_close($ch); 

    ...store data to DB... 
} 

當手動訪問兩個鏈接(與不同的標籤)美味顯示不同的數據,因爲它將兩者視爲單個/不同標籤,並且用戶使用兩種類型的引號。當使用我的腳本訪問數據時,第一個可以工作,但第二個失敗並且根本不顯示任何數據。

我試過urlencoding和rawurlencoding的標籤,手動更換捲曲報價與’和%92但無濟於事。

所以問題是: 我該如何改變我的腳本,以獲得這兩個標籤的美味JSON數據?

+0

您錯過了''url =' –

+0

行的開頭處的撇號謝謝,複製代碼時錯過了 – Roland

+0

不知道爲什麼,但Google Chrome似乎編碼tag'12以標記%E2%80 %9912。 (不是%92) –

回答

0

終於找到了解決方案,可以幫助其他人在未來的問題。不知道這是否是解決這個問題的最佳解決方案,但是它很有效。

Willem-Jan指出我關於編碼的正確方向。我使用Firefox的插件Live HTTP Headers來調查URL發送到Delicious的方式。鏈接「http://feeds.delicious.com/v2/json/username/tag'12?count=100」轉換爲「http://feeds.delicious.com/v2/json/username/tag%E2% 80%9912?計數= 100" 。

當使用已經翻譯的URL作爲$ url變量時,請求顯示正確的結果。

0

不是一個真正的答案。但對我來說,這只是工作:

<?php 
    // Used sprintf to keep it readable, shouldn't make a difference 
    $urlTemplate = 'http://feeds.delicious.com/v2/json/%s/%s?count=%d'; 
    $tag = 'tag’12'; 
    $url = sprintf($urlTemplate, 'wjzijderveld', $tag, 20); 

    echo $url . PHP_EOL; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    var_dump(json_decode(curl_exec($ch))).PHP_EOL; 
    curl_close($ch); 

我試過從終端。 我唯一能想到的是,你的數據可能不是UTF-8編碼?

+0

我試着用你的例子,但我得到的輸出是:http://feeds.delicious.com/v2/json/urvinkirindongo/gtctxt'12?count=100 NULL – Roland