使用PHP/CURL解析REST响应
我在这里尝试RESTAPI:,特别是有机结果,但无论我尝试了什么,我似乎都无法操纵数据。有人能告诉我怎么做吗?我尝试过SimpleXML、JSON,甚至通过explode()分解响应,但我肯定错过了一些东西,因为我所能做的就是将结果推送到数组的开头,而不是实际分解它 这是我当前的代码:使用PHP/CURL解析REST响应,php,json,rest,curl,Php,Json,Rest,Curl,我在这里尝试RESTAPI:,特别是有机结果,但无论我尝试了什么,我似乎都无法操纵数据。有人能告诉我怎么做吗?我尝试过SimpleXML、JSON,甚至通过explode()分解响应,但我肯定错过了一些东西,因为我所能做的就是将结果推送到数组的开头,而不是实际分解它 这是我当前的代码: $url = "http://api.semrush.com/?type=phrase_organic&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&displ
$url = "http://api.semrush.com/?type=phrase_organic&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&display_limit=10&export_columns=Dn,Ur&phrase=seo&database=us";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
其结果是:
string 'Domain;Url
site-analyzer.com;https://www.site-analyzer.com/
woorank.com;https://www.woorank.com/
hubspot.com;http://blog.hubspot.com/blog/tabid/6307/bid/33164/6-SEO-Tools-to-Analyze-Your-Site-Like-Google-Does.aspx
seoworkers.com;http://www.seoworkers.com/tools/analyzer.html
seositecheckup.com;http://seositecheckup.com/
site-seo-analysis.com;http://www.site-seo-analysis.com/
webseoanalytics.com;http://www.webseoanalytics.com/free/seo-tools/web-seo-analysis.php
seocentro.com;http://www.seocentro.com/t'... (length=665)
有没有一种简单的方法可以将其分解,以便我可以操纵或重新格式化响应?好吧,我们可以按空格
“
”分解,然后按分解代码>
$response = explode(" ", trim(str_replace("Domain;Url", "", $response)));
$readableResponse = [];
foreach($response as $r)
{
$e = explode(";", $r);
$readableResponse[$e[0]] = $e[1];
}
print_r($readableResponse);
即
您需要正确分解新行字符,以获得csv
结构,然后将其解析为csv
foreach(preg_split("/((\r?\n)|(\r\n?))/", $response) as $key=>$line){
if ($key!=0) {
list($domain,$url) = str_getcsv($line,';');
print 'Domain: ' . $domain . ', URL: ' . $url . PHP_EOL;
}
}
使用,
以上将输出
Domain: wikipedia.org, URL: http://en.wikipedia.org/wiki/Search_engine_optimization
Domain: searchengineland.com, URL: http://searchengineland.com/guide/what-is-seo
Domain: moz.com, URL: http://moz.com/beginners-guide-to-seo
if
语句用于过滤出第一行,即csv标题。为什么explode
不起作用?我在这里尝试并工作:$str=“Domain;Url searchengineland.com;http://searchengineland.com/guide/what-is-seo 维基百科网站$arr=爆炸(“;”,$str);var_转储($arr)代码>。我得到的结果很好$arr[1]=“域”
…这就是您的响应格式吗?请使用var\u dump($result)
的结果更新您的问题,并查看源代码,如果您在浏览器中检查此问题,请复制结果。请注意:这不是REST API。这只是一个简单的API,但根本不是RESTful。@DanFromGermanWeeeell。。。它正在使用无状态身份验证,但仅此而已..我已使用var_dump()进行了更新,并提供了新的结果。我想我遇到了解析问题,因为在每个条目之间插入了ASCII回车和换行符:Domain;网址
site-analyzer.com;htt。。。等等。为了解决这个问题,您需要知道字符串的转义字符,如果实际分号是数据的一部分。semrush应该在某个地方有他们的回应文档。@Flosculus是的,他们的回应是非sense@old_mountain ... 嘿,我如何解析一个基本的semrush API响应?这是回复本身(数据库;域;排名;有机关键词;有机流量;有机成本;Adwords关键词;Adwords流量;Adwords成本;PLA uniques;PLA关键词美国;seobook.com;98072;14085;14300;62233;0;0;0;0)谢谢!此外,如果任何答案有帮助,不要忘记将其中一个标记为已接受的答案,以便将来的用户可以找到它。
Domain: wikipedia.org, URL: http://en.wikipedia.org/wiki/Search_engine_optimization
Domain: searchengineland.com, URL: http://searchengineland.com/guide/what-is-seo
Domain: moz.com, URL: http://moz.com/beginners-guide-to-seo