使用PHP/CURL解析REST响应

使用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

我在这里尝试RESTAPI:,特别是有机结果,但无论我尝试了什么,我似乎都无法操纵数据。有人能告诉我怎么做吗?我尝试过SimpleXML、JSON,甚至通过explode()分解响应,但我肯定错过了一些东西,因为我所能做的就是将结果推送到数组的开头,而不是实际分解它

这是我当前的代码:

    $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