从stackoverflow的api响应中提取键值对,使用php将它们保存在mysql中

时间:2015-04-16 08:26:53

标签: php mysql stackexchange-api

如何使用php从stackoverflow API的响应中提取键值对?

键是名称和计数

获取响应的链接如下所示

Link of stackoverflow request api

响应为

  

{"项目":[{" has_synonyms":真," is_moderator_only":假," is_required":假,&# 34;计数":835623,"名称":"的java"},{" has_synonyms":真," is_moderator_only":假" is_required":假,"计数":826692,"名称":"的javascript"},{" has_synonyms&#34 ;:真," is_moderator_only":假," is_required":假,"计数":780233,"名称":" C#"},{" has_synonyms":真," is_moderator_only":假," is_required":假,"计数":733762 "名称":" PHP"},{" has_synonyms":真," is_moderator_only":假," is_required&#34 ;:假,"计数":656491,"名称":"机器人"},{" has_synonyms":假," is_moderator_only":假," is_required":假,"计数":600666,"名称":" jquery的"},{& #34; has_synonyms":真," is_moderator_only":假," is_required":假," COUN T":411780,"名称":"蟒"},{" has_synonyms":真," is_moderator_only":假,& #34; is_required":假,"计数":402876,"名称":" HTML"},{" has_synonyms&#34 ;:真,#&34; is_moderator_only":假," is_required":假,"计数":361469,"名称":" C + +"},{" has_synonyms":真," is_moderator_only":假," is_required":假,"计数&#34 ;: 324702,"名称":" IOS"},{" has_synonyms":真," is_moderator_only":假," is_required&# 34;:假,"计数":314826,"名称":" MySQL的"},{" has_synonyms":真,&#34 ; is_moderator_only":假," is_required":假,"计数":296359,"名称":" CSS"},{ #&34; has_synonyms":真," is_moderator_only":假," is_required":假,"计数":271375,"名称&# 34;:" SQL"},{" has_synonyms":真," is_moderator_only":假," is_required":F ALSE,"计数":253038,"名称":" asp.net"},{" has_synonyms":真," is_moderator_only":假," is_required":假,"计数":224602,"名称":"目标c"}, {" has_synonyms":真," is_moderator_only":假," is_required":假,"计数":207451,"名称& #34;:" .NET"},{" has_synonyms":真," is_moderator_only":假," is_required":假,& #34;计数":202666,"名称":" iphone"},{" has_synonyms":真," is_moderator_only&#34 ;:假,#&34; is_required":假,"计数":200238,"名称":"红宝石上导轨"},{&# 34; has_synonyms":假," is_moderator_only":假," is_required":假,"计数":176868,"名称" :" C"},{" has_synonyms":假," is_moderator_only":假," is_required":假,"计数& #34;:130813,"名称":"红宝石"},{" has_synonyms":真," is_moderator_only ":假," is_required":假,"计数":129764,"名称":"阵列"},{& #34; has_synonyms":真," is_moderator_only":假," is_required":假,"计数":127562,"名称&#34 ;:" SQL服务器"},{" has_synonyms":真," is_moderator_only":假," is_required":假,&# 34;计数":116079,"名称":" AJAX"},{" has_synonyms":真," is_moderator_only":假" is_required":假,"计数":114163,"名称":"正则表达式"},{" has_synonyms&#34 ;:假," is_moderator_only":假," is_required":假,"计数":112127,"名称":" XML"},{" has_synonyms":真," is_moderator_only":假," is_required":假,"计数":111066 "名称":" JSON"},{" has_synonyms":真," is_moderator_only":假," is_required&#34 ;:假,"计数":107333,"名称":" asp.net-MVC"},{" has_synonyms&# 34;:假," is_moderator_only":假," is_required":假,"计数":99944"名称":&#34 ; WPF"},{" has_synonyms":假," is_moderator_only":假," is_required":假,"计数&#34 ;: 98195"名称":" linux的"},{" has_synonyms":假," is_moderator_only":假," is_required&# 34;:假,"计数":93114"名称":" django的"}]," has_more":真,&#34 ; quota_max" 300" quota_remaining":228}

我已经这样做但在php中没有得到回应

<?php

$url = 'https://api.stackexchange.com/2.2/tags?order=desc&sort=popular&site=stackoverflow';

$cURL = curl_init();

curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);

curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json'
));

$result = curl_exec($cURL);

curl_close($cURL);



print_r($result);

?>

我也使用javascript完成了这个我得到了回复但是没有办法让javascript可以与数据库进行交互。我试过从那里把它发送到php文件但是我无法得到密钥来自请求的价值对。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
    type:"GET",
    url:"https://api.stackexchange.com/2.2/tags?order=desc&sort=popular&site=stackoverflow",
    success:function(data){

        $.ajax({
                type:"POST",
                url:"savetodb.php",
                data:"data="+JSON.stringify(data),
                success:function(daa){
                alert(daa)  }
                })
    }
})
</script>

我也尝试过php函数file_get_contents([URL])

代码如下

<?php
$url = "https://api.stackexchange.com/2.2/tags?order=desc&sort=popular&site=stackoverflow";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
print_r($json_data);

?>

我收到错误

1.file_get_contents():php_network_getaddresses:getaddrinfo failed:没有这样的主机已知

2.file_get_contents(https://api.stackexchange.com/2.2/tags?order=desc&sort=popular&site=stackoverflow):无法打开流:php_network_getaddresses:getaddrinfo failed:没有这样的主机已知

1 个答案:

答案 0 :(得分:0)

Stack Exchange API documentation中所述,

  

所有API响应都是JSON

所以你应该用你需要使用的编程语言来搜索JSON解析。

对于DNS部分,我认为你应该检查this answer on serverfault;专注于前两件事:

[X]

要检查的第一件事是检查你的php.ini并确保启用这些属性

  

allow_url_fopen =开启

     

allow_url_include =开启

[X]

创建一个phpinfo()文件[phincfofile.com以防万一]并检查这些扩展是否已启用

  

OpenSSL的

     

插槽

特别是对于通过禁用PHP_OpenSSL扩展来运行xammp或wammp的Windows用户,您可能无法通过@fsockopen连接