![](/img/trans.png)
[英]Why does this regex not match the URLs in this Google results page?
[英]Match Urls in results of api call
我有一个 api 调用,其中包含在它返回的 JSON 中被召回的 Url。
我需要找到那些返回的 url,其中包含用于原始 get 请求的字符串并且状态为 200。我尝试使用 strpos 方法,但这似乎不起作用。
public function getCompanyData() {
$client = new Client();
$response = $client->request('GET', 'https://api.github.com/orgs/fakename');
$statusCode = $response->getStatusCode();
$body = $response->getBody()->getContents();
$confirmed = strpos($body,'api.github.com/orgs/fakename');
if($statusCode === 200 && $confirmed !== false) {
return $body;
}
else {
return $statusCode." Error";
}
}
返回的 JSON -
{
"login": "fakename",
"id": 1214096,
"node_id": "***=",
"url": "https://api.github.com/orgs/fakename",
"repos_url": "https://api.github.com/orgs/fakename/repos",
"events_url": "https://api.github.com/orgs/fakename/events",
"hooks_url": "https://api.github.com/orgs/fakename/hooks",
"issues_url": "https://api.github.com/orgs/fakename/issues",
"members_url": "https://api.github.com/orgs/fakename/members{/member}",
"public_members_url": "https://api.github.com/orgs/fakename/public_members{/member}",
"avatar_url": "https://avatars3.githubusercontent.com/u/****?v=4",
"description": "",
"name": "fakename",
"company": null,
"blog": "fakename.com",
"location": null,
"email": null,
"twitter_username": null,
"is_verified": false,
"has_organization_projects": true,
"has_repository_projects": true,
"public_repos": 41,
"public_gists": 0,
"followers": 0,
"following": 0,
"html_url": "https://github.com/fakename",
"created_at": "2011-11-22T21:48:43Z",
"updated_at": "2020-09-11T23:05:04Z"
}
一种方法如下:
<?php
class SomeClass
{
/**
* @var int The status code of the last http request
*/
private $statusCode;
/**
* Get an array of decoded data from the given url.
* @param $url
* @return array
*/
public function getDataFromUrl($url) {
$client = new Client();
$response = $client->request('GET', $url);
$this->statusCode = $response->getStatusCode();
$body = $response->getBody()->getContents();
return $this->statusCode === 200 ? json_decode($body, true) : [];
}
/**
* Get all data for a given organization including nested ancillary data
* @param string $orgName
* @return array
*/
public function getCompanyData($orgName) {
$mainUrl = "https://api.github.com/orgs/$orgName";
$mainData = $this->getDataFromUrl($mainUrl);
if ($mainData && $this->statusCode === 200) {
$ancillaryUrls = $this->getAncillaryUrlsFromData($mainData, $orgName);
foreach ($ancillaryUrls as $property => $url) {
$ancillaryData = $this->getDataFromUrl($url);
$mainData[$property] = $ancillaryData;
}
}
return $mainData;
}
/**
* Get a JSON string containing all data for a given organization including nested ancillary data
* @param string $orgName
* @return array|mixed
*/
public function getCompanyDataAsJson($orgName) {
return json_encode($this->getCompanyData($orgName));
}
/**
* From the provided array of data, return an new array containing the ancillary urls
* which also need to be requested
* @param array $data
* @param string $orgName
* @return array
*/
public function getAncillaryUrlsFromData($data, $orgName) {
$urls = [];
if (is_array($data)) {
$targetUrl = "api.github.com/orgs/$orgName";
foreach ($data as $property => $value) {
// if property has '_url' and value is like our url, add it to our array of urls
if (strpos($property, '_url') !== false && strpos($value, $targetUrl) !== false) {
$cleanProp = str_replace('_url', '', $property);
$urls[$cleanProp] = $targetUrl;
}
}
}
return $urls;
}
}
现在,如果你想要一个数组的结果,你可以调用:
$someClass = new SomeClass();
$arrayOfData = $someClass->getCompanyData('fakename');
或者,如果您希望将结果作为 JSON 字符串,您可以调用:
$someClass = new SomeClass();
$jsonData = $someClass->getCompanyDataAsJson('fakename');
并且响应将包含以下键(除了原始主要数据) "repos", "events", "hooks", "issues", "members", "public_members"
所有这些都填充了来自他们个人调用的响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.