0

Deliciousから次のようにデータを取得するスクリプトを作成しました。

...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...
}

(異なるタグを使用して)両方のリンクに手動でアクセスすると、Deliciousは、両方を個別/異なるタグとして扱い、ユーザーが両方のタイプの引用符を使用したため、異なるデータを表示します。スクリプトを使用してデータにアクセスすると、最初のスクリプトは機能しますが、2番目のスクリプトは失敗し、データがまったく表示されません。

タグのurlencodingとrawurlencodingを試し、中引用符を手動で’に置き換えました。と%92が、役に立たない。

したがって、問題は次のとおりです。Deliciousから両方のタグのJSONデータを取得するようにスクリプトを変更するにはどうすればよいですか?

4

2 に答える 2

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でエンコードされていない可能性があるということだけです。

于 2012-11-02T19:04:53.333 に答える
0

最後に、将来他の人を助けるかもしれない問題の解決策を見つけました。それがこの問題の最善の解決策であるかどうかはわかりませんが、うまくいきました。

Willem-Janは、エンコーディングについて正しい方向を示してくれました。FirefoxのアドオンLiveHTTPヘッダーを使用して、URLがDeliciousに送信される方法を調査しました。リンク「http://feeds.delicious.com/v2/json/username/tag'12?count=100」は「http://feeds.delicious.com/v2/json/username/tag%E2%」に変換されました80%9912?count =100"。

すでに変換されたURLを$url変数として使用すると、リクエストは正しい結果を表示しました。

于 2012-11-05T13:54:55.477 に答える