-4

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

键是名称和计数

下面给出了获取响应的链接

stackoverflow请求api的链接

响应为

{"items":[{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":835623,"name":"java"},{"has_synonyms":true,"is_moderator_only" :false,"is_required":false,"count":826692,"name":"javascript"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":780233," name":"c#"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":733762,"name":"php"},{"has_synonyms":true," is_moderator_only":false,"is_required":false,"count":656491,"name":"android"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":600666,"name":"jquery"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":411780 ,"name":"python"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":402876,"n​​ame":"html"},{"has_synonyms":true ,"is_moderator_only":false,"is_required":false,"count":361469,"name":"c++"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count" :324702,"name":"ios"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":314826,"name":"mysql"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":296359,"name":"css"},{" has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":271375,"name":"sql"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false ,"count":253038,"name":"asp.net"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":224602,"name":"objective- c"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":207451,"name":".net"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":202666,"name":"iphone"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false ,"count":200238,"name":"ruby-on-rails"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":176868,"name":" c"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":130813,"name":"ruby"},{"has_synonyms":true,"is_moderator_only":false ,"is_required":false,"count":129764,"name":"arrays"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":127562,"name":"sql-server"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":116079,"name ":"ajax"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":114163,"name":"regex"},{"has_synonyms":false,"is_moderator_only ":false,"is_required":false,"count":112127,"name":"xml"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":111066, "名称":"json"},{"has_synonyms":true,"is_moderator_only":false,"is_required":false,"count":107333,"name":"asp.net-mvc"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":99944,"name":"wpf"},{"has_synonyms" :false,"is_moderator_only":false,"is_required":false,"count":98195,"name":"linux"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false," count":93114,"name":"django"}],"has_more":true,"quota_max":300,"quota_remaining":228}is_required":false,"count":98195,"name":"linux"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":93114,"name":" django"}],"has_more":true,"quota_max":300,"quota_remaining":228}is_required":false,"count":98195,"name":"linux"},{"has_synonyms":false,"is_moderator_only":false,"is_required":false,"count":93114,"name":" django"}],"has_more":true,"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: No such host is known

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

4

1 回答 1

0

Stack Exchange API 文档中所述,

所有 API 响应都是 JSON

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

对于 DNS 部分,我认为您应该在 serverfault 上检查此答案;专注于前两件事:

[X]

首先要检查的是检查您的 php.ini 并确保启用了这些属性

allow_url_fopen = 打开

allow_url_include = 开启

[X]

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

OpenSSL

插座

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

于 2015-04-16T08:39:06.307 回答