外部のRSSを読み込んで表示する方法が知りたいです

質問全般・改善要望
palma
メンバー
メンバー
記事: 5
登録日時: 2016年10月28日(金) 09:50

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by palma » 2016年11月17日(木) 13:26

MODX Evolutionで外部のRSSを読み込んで表示する目的で「piex」を利用していましたが、新しいMODX Evolutionで利用できなかった為、「NewsParserX」を利用してみたのですが、ページの表示が4秒ほど遅く表示されるようになっていまいました。

「piex」と「NewsParserX」以外で、外部のRSSを読み込んで表示する方法があれば教えていただけますでしょうか。
ryocka
メンバー
メンバー
記事: 46
登録日時: 2014年4月28日(月) 00:06

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by ryocka » 2016年11月28日(月) 10:26

こんにちは。
まだローカルのみでテスト中ですが、1.0.18J-rc2+XAMPP(PHP 5.6.24)にてpiexが動作しています。
もしかしたらサーバスペックなどの条件によって動かなくなるのではと気になりましたので、情報として投稿いたしました。
noka
メンバー
メンバー
記事: 82
登録日時: 2013年6月19日(水) 10:02

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by noka » 2016年11月28日(月) 20:33

palmaさん,ryockaさん,こんばんは。

私も,
RSS取得する必要があった際に調べたことがあるのですが,piexはメンテナンスされている感じではなかったのですよね…。

なのでその時は,piexでも使用しているライブラリsimplepie(https://github.com/simplepie/simplepie/
の最新版(1.4.*)を使用して、以下のような感じの簡易的なスニペットを作って対応しました。汎用的なスニペットがある敷居が下がって良いのでしょうけれども。

simplepieそのものは,rss/atomのバージョン違いを吸収してくれてキャッシュも使え、なにげにきちんとメンテナンスされているうえ,composerで管理することもできるので便利だと思います。

以下のスニペット(getRSSとして保存)は,simplepieのライブラリの保存場所に気をつければ,最近のevoで利用できると思います。
本職のプログラマでもないので恥ずかしいんですが,参考まで。

コード: 全て選択

/*
* getRSS
* RSS/Atomフィードを取得する簡易スニペット
* [[getRSS? &url=`rssのurl` &n=`取得件数` &tpl=`フォーマットのチャンク名`]]
* もしくは、rssurlを入力するテンプレート変数等のモディファイア
* [*tv_url:getRSS(n)*]
* で利用。
* テンプレートのプレースホルダは,とりあえず[+url+][+date+][+title+][+summary+]が利用可能。
* require  https://github.com/simplepie/simplepie/
*/

if(isset($value)) $url=$value;
if(isset($opt)) $n=(int)$opt;

$a=array(
    'url'=> isset($url)?$url:'',
    'n'=> isset($n)?intval($n):5,
    'tpl'=>isset($tpl)?$tpl:'',
);

if(!$a['url']) return;

if(!$tpl){
  $format = '<li><a href="[+url+]" target="_blank"><span class="date date-rss">[+date:date(%Y.%m.%d)+]</span><span>[+title+]</span></a></li>';
}else{
  $format = $modx->getChunk($tpl);
}

//load simplepie
if(file_exists($modx->config['base_path'] . '../vendor/autoload.php')) {
   //composer
  $autoload = $modx->config['base_path'] . '../vendor/autoload.php';
}else{
   //manual
  $autoload = $modx->config['base_path'] . 'assets/snippets/getRSS/simplepie/autoloader.php';
}
require_once($autoload);

$feed = new SimplePie();
$feed->set_feed_url($a['url']);
$feed->set_cache_location($modx->config['base_path'] . "assets/cache/rss/");
        if(!file_exists($modx->config['base_path'] . "assets/cache/rss/"))mkdir($modx->config['base_path'] . "assets/cache/rss/", 0777, true);
$feed->set_cache_duration(1800);
$success = $feed->init();

$c=1;
$r="";

if ($success){
  foreach ($feed->get_items() as $e ) {
    $ph=array(
      'url'=>$e->get_link(),
      'date'=>$e->get_date(),
      'title'=> $e->get_title(),
      'summary'=>$e->get_description(),
    );
    $r .= $modx->parseText($format, $ph);
    if($c++==$a['n'])break;
  }
}else{
    $r='<li>最新情報の取得に失敗しました。</li>';
}

return $r;
palma
メンバー
メンバー
記事: 5
登録日時: 2016年10月28日(金) 09:50

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by palma » 2016年11月30日(水) 17:45

ryockaさん、nokaさん、貴重な情報をご提供いただき、ありがとうございます。

さくらインターネットのスタンダードプランにインストールしたMODXを、1.0.17Jにアップデートしたところ、piexが利用できなくなってしまいました。

NewsParserXを使ったときにはページを表示するのに4秒ほど遅く表示されていましたが、nokaさんのコードを利用すると遅延を感じることなくページの表示が完了します。

本当に助かりました。

ありがとうございます。
ryocka
メンバー
メンバー
記事: 46
登録日時: 2014年4月28日(月) 00:06

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by ryocka » 2016年12月02日(金) 19:05

こんにちは。
私も、さくらのレンタルサーバにてpiexを利用していますので、動かなくなった際は
参考にさせていただきます。

有用な情報を公開していただきまして誠にありがとうございました。
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by yama » 2016年12月06日(火) 15:03

noka さんが書きました:

コード: 全て選択

/*
* getRSS
* RSS/Atomフィードを取得する簡易スニペット
* [[getRSS? &url=`rssのurl` &n=`取得件数` &tpl=`フォーマットのチャンク名`]]
* もしくは、rssurlを入力するテンプレート変数等のモディファイア
* [*tv_url:getRSS(n)*]
* で利用。
* テンプレートのプレースホルダは,とりあえず[+url+][+date+][+title+][+summary+]が利用可能。
* require  https://github.com/simplepie/simplepie/
*/

if(isset($value)) $url=$value;
if(isset($opt)) $n=(int)$opt;

$a=array(
    'url'=> isset($url)?$url:'',
    'n'=> isset($n)?intval($n):5,
    'tpl'=>isset($tpl)?$tpl:'',
);

if(!$a['url']) return;

if(!$tpl){
  $format = '<li><a href="[+url+]" target="_blank"><span class="date date-rss">[+date:date(%Y.%m.%d)+]</span><span>[+title+]</span></a></li>';
}else{
  $format = $modx->getChunk($tpl);
}

//load simplepie
if(file_exists($modx->config['base_path'] . '../vendor/autoload.php')) {
   //composer
  $autoload = $modx->config['base_path'] . '../vendor/autoload.php';
}else{
   //manual
  $autoload = $modx->config['base_path'] . 'assets/snippets/getRSS/simplepie/autoloader.php';
}
require_once($autoload);

$feed = new SimplePie();
$feed->set_feed_url($a['url']);
$feed->set_cache_location($modx->config['base_path'] . "assets/cache/rss/");
        if(!file_exists($modx->config['base_path'] . "assets/cache/rss/"))mkdir($modx->config['base_path'] . "assets/cache/rss/", 0777, true);
$feed->set_cache_duration(1800);
$success = $feed->init();

$c=1;
$r="";

if ($success){
  foreach ($feed->get_items() as $e ) {
    $ph=array(
      'url'=>$e->get_link(),
      'date'=>$e->get_date(),
      'title'=> $e->get_title(),
      'summary'=>$e->get_description(),
    );
    $r .= $modx->parseText($format, $ph);
    if($c++==$a['n'])break;
  }
}else{
    $r='<li>最新情報の取得に失敗しました。</li>';
}

return $r;

上記コード、GitHubに登録していただけたらmodx.jpで管理を引き継ぎます。いかがでしょうか?
noka
メンバー
メンバー
記事: 82
登録日時: 2013年6月19日(水) 10:02

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by noka » 2016年12月07日(水) 20:50

yama さま
上記コード、GitHubに登録していただけたらmodx.jpで管理を引き継ぎます。いかがでしょうか?
ありがとうございます。近日中に登録してみますのでよろしくお願い致します。

追記で質問です。
自分のgithubアカウントでリポジトリ作成して共有or移譲する感じになるのでしょうか?
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by yama » 2016年12月07日(水) 21:00

作っていただいたリポジトリをフォークして、独立して管理するような感じになります
noka
メンバー
メンバー
記事: 82
登録日時: 2013年6月19日(水) 10:02

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by noka » 2016年12月12日(月) 19:26

yamaさま

外部ライブラリの扱いをどうすべきかよくわからないのですが,とりあえず独立して動作できるように同梱してます。
https://github.com/noka/getRSS

ちなみに,他にもEvogalleryのフォーク版(アップローダーflashをjsライブラリに差替え,最新evoで取り敢えず動作)をgithubで管理してみています。有用そうでしたら,セキュリティ面が心配だったりするので,見て頂けると嬉しいです。
https://github.com/noka/EvoGallery/releases
saba
メンバー
メンバー
記事: 1
登録日時: 2017年4月07日(金) 02:36

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by saba » 2017年4月07日(金) 02:42

noka様 yama様

こちらを使用する際は、https://github.com/noka/getRSSからダウンロードしたgetRSSフォルダをsnippetsにアップロードし、getRSS.install-base.tpl.phpをスニペットに登録すれば良いのでしょうか?初歩的な質問で申し訳ありません。
noka
メンバー
メンバー
記事: 82
登録日時: 2013年6月19日(水) 10:02

外部のRSSを読み込んで表示する方法が知りたいです

投稿記事by noka » 2017年4月13日(木) 21:33

saba様
こんばんは。ご返事が遅くなりました。ご質問の件、そのとおりで大丈夫なはずです。が、うまく動かない点などございましたら、状況を共有いただければ対応できるかもしれません。よろしくお願いします。
saba さんが書きました:Source of the post
こちらを使用する際は、https://github.com/noka/getRSSからダウンロードしたgetRSSフォルダをsnippetsにアップロードし、getRSS.install-base.tpl.phpをスニペットに登録すれば良いのでしょうか?

“質問全般・改善要望” へ戻る