我已经创建了一个脚本,可以从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数据?
答案 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变量时,请求显示正确的结果。