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 会显示不同的数据,因为它将两者都视为单独/不同的标签,并且用户使用了这两种类型的报价。当使用我的脚本访问数据时,第一个有效,但第二个失败并且根本不显示任何数据。

我试过 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 的附加 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?count=100”。

当使用已翻译的 URL 作为 $url 变量时,请求会显示正确的结果。

于 2012-11-05T13:54:55.477 回答