通过带有卷曲引用的标记检索美味JSON数据

时间:2012-11-02 15:06:19

标签: php json curl delicious-api

我已经创建了一个脚本,可以从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数据?

2 个答案:

答案 0 :(得分: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编码的吗?

答案 1 :(得分:0)

最后找到了解决问题的方法,可能会对未来的其他人有所帮助。不确定这是否是解决此问题的最佳方案,但它确实有效。

Willem-Jan指出了关于编码的正确方向。我使用Firefox的附加Live HTTP标头来调查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变量时,请求显示正确的结果。