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中文乱码的问题