php [php:HTTPClient Guzzle] WordPressとかのRSSを読んでどうこうするやつだったはず。#php #guzzle #wordpress
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php [php:HTTPClient Guzzle] WordPressとかのRSSを読んでどうこうするやつだったはず。#php #guzzle #wordpress相关的知识,希望对你有一定的参考价值。
## なんすか
Composerで導入できるHTTPClient。
非同期のリクエスト送信もできたりいい感じぽい。
## 何がうれしいの
とりあえずRSSの取得で simplexml_load_file() で直リクエストだと重たいから、こいつで取りに行って速度の向上を目指す。
## 導入
### 必須要件
- PHP 5.5.0以上
- ```php.ini``` で ```allow_url_fopen``` enableに
- 実行環境で cURL 7.19.4 以上が必要
### 導入手順
1. composerで叩く!
`````
$ composer require guzzlehttp/guzzle:~6.0
$ composer dump-autoload
`````
2. use GuzzleHttp; (使用バージョンによる)
3. $client = new \GuzzleHttp\Client();
4. get() やら なにやらドキュメント参照
---
## 並行処理をsimplexml_load と組合せ
Guzzle最大の利点はHTTPリクエストの並行処理がPHPで簡単にできること。コードは `getBlogFeed__guzzle.php` 参照。
// 多分どこかのコントローラメソッド
public function getBlogFeed(){
$rss = [];
$xml[0] = simplexml_load_file('http://blog1.com/feed');
$xml[1] = simplexml_load_file('http://blog2.com/feed');
for ($i=0; $i < count($xml); $i++) {
foreach($xml[$i]->channel->item as $entry){
$rss[$i]['name'] = strval($entry->children('dc',true)->creator);
preg_match_all('/<img.*?src=(["\'])(.+?)\1.*?>/i', $entry->description, $entryimg);
$rss[$i]['category'] = strval($entry->category);
$rss[$i]['link'] = strval($entry->guid);
$linkStr = strval($entry->link);
$rss[$i]['title'] = strval($entry->title);
$rss[$i]['body'] = str_replace(["\r\n","\r","\n"], "",strip_tags(strval($entry->description),'<p><a>'));
$rss[$i]['date'] = date("Y-m-d H:i",strtotime($entry->pubDate));
if(isset($entryimg[2][0])){
$rss[$i]['img'] = $entryimg[2][0];
}
}
}
$sort = [];
foreach ((array) $rss as $key => $value) {
$sort[$key] = $value['date'];
}
array_multisort($sort, SORT_DESC, $rss);
return $rss;
}
<?php
namespace App\Model;
use App\Base\Config;
use App\Base\Model;
use GuzzleHttp\Client;
use GuzzleHttp\Event\CompleteEvent;
class Blogs extends Model {
public function getBlogFeed() {
$url[0] = "http://blog1.com/feed";
$url[1] = "http://blog2.com/feed";
$url[2] = "http://blog3.com/feed";
$cnt = 0;
$rss = [];
for ($i=0;$i<count($url);$i++) {
$client[$i] = new \GuzzleHttp\Client();
$res[$i] = $client[$i]->get($url[$i]);
$xml[$i] = simplexml_load_string($res[$i]->getBody());
foreach($xml[$i]->channel->item as $entry){
$rss[$cnt]['name'] = strval($entry->children('dc',true)->creator);
preg_match_all('/<img.*?src=(["\'])(.+?)\1.*?>/i', $entry->description, $entryimg);
$rss[$cnt]['category'] = strval($entry->category);
$rss[$cnt]['link'] = strval($entry->link);
$linkStr = strval($entry->link);
$rss[$cnt]['title'] = strval($entry->title);
$rss[$cnt]['body'] = str_replace(["\r\n","\r","\n"], "",strip_tags(strval($entry->description),'<p><a>'));
$rss[$cnt]['date'] = date("Y-m-d H:i",strtotime($entry->pubDate));
if (isset($entryimg[2][0])) {
$rss[$cnt]['img'] = $entryimg[2][0];
} else {
$rss[$cnt]['img'] = $this->Config->imgdir.'/ariaroid--transparent.png';
}
$cnt++;
}
}
$sort = [];
foreach ($rss as $key => $value) {
$sort[$key] = $value['date'];
}
array_multisort($sort, SORT_DESC, $rss);
return $rss;
}
}
以上是关于php [php:HTTPClient Guzzle] WordPressとかのRSSを読んでどうこうするやつだったはず。#php #guzzle #wordpress的主要内容,如果未能解决你的问题,请参考以下文章
php [php:HTTPClient Guzzle] WordPressとかのRSSを読んでどうこうするやつだったはず。#php #guzzle #wordpress
Atitit.http httpclient实践java c# .net php attilax总结
我需要 Android 中 HttpClient 的替代选项来将数据发送到 PHP,因为它不再受支持
Android JSON HttpClient 使用 HttpResponse 将数据发送到 PHP 服务器
如何从 HttpClient 检索照片?
请教httpclient4.0中文乱码的问题