2012-11-02 43 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