ページ 12

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

Posted: 2016年11月17日(木) 13:26
by palma
MODX Evolutionで外部のRSSを読み込んで表示する目的で「piex」を利用していましたが、新しいMODX Evolutionで利用できなかった為、「NewsParserX」を利用してみたのですが、ページの表示が4秒ほど遅く表示されるようになっていまいました。

「piex」と「NewsParserX」以外で、外部のRSSを読み込んで表示する方法があれば教えていただけますでしょうか。

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

Posted: 2016年11月28日(月) 10:26
by ryocka
こんにちは。
まだローカルのみでテスト中ですが、1.0.18J-rc2+XAMPP(PHP 5.6.24)にてpiexが動作しています。
もしかしたらサーバスペックなどの条件によって動かなくなるのではと気になりましたので、情報として投稿いたしました。

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

Posted: 2016年11月28日(月) 20:33
by noka
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;

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

Posted: 2016年11月30日(水) 17:45
by palma
ryockaさん、nokaさん、貴重な情報をご提供いただき、ありがとうございます。

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

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

本当に助かりました。

ありがとうございます。

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

Posted: 2016年12月02日(金) 19:05
by ryocka
こんにちは。
私も、さくらのレンタルサーバにてpiexを利用していますので、動かなくなった際は
参考にさせていただきます。

有用な情報を公開していただきまして誠にありがとうございました。

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

Posted: 2016年12月06日(火) 15:03
by yama
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で管理を引き継ぎます。いかがでしょうか?

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

Posted: 2016年12月07日(水) 20:50
by noka
yama さま
上記コード、GitHubに登録していただけたらmodx.jpで管理を引き継ぎます。いかがでしょうか?
ありがとうございます。近日中に登録してみますのでよろしくお願い致します。

追記で質問です。
自分のgithubアカウントでリポジトリ作成して共有or移譲する感じになるのでしょうか?

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

Posted: 2016年12月07日(水) 21:00
by yama
作っていただいたリポジトリをフォークして、独立して管理するような感じになります

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

Posted: 2016年12月12日(月) 19:26
by noka
yamaさま

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

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

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

Posted: 2017年4月07日(金) 02:42
by saba
noka様 yama様

こちらを使用する際は、https://github.com/noka/getRSSからダウンロードし ... れば良いのでしょうか?初歩的な質問で申し訳ありません。

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

Posted: 2017年4月13日(木) 21:33
by noka
saba様
こんばんは。ご返事が遅くなりました。ご質問の件、そのとおりで大丈夫なはずです。が、うまく動かない点などございましたら、状況を共有いただければ対応できるかもしれません。よろしくお願いします。
saba さんが書きました:
こちらを使用する際は、https://github.com/noka/getRSSからダウンロードし ... れば良いのでしょうか

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

Posted: 2020年4月16日(木) 10:30
by オレンジみかん
初めての投稿です。
getRSSで、テンプレートで使用できるプレースホルダは,[+title+][+url+][+date+][+summary+]とありますが、
「+category+」を取得したいのですが、phpの記述の方法がわかりません。
どなたかご教授していただけないでしょうか?

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

Posted: 2020年4月16日(木) 22:38
by yama
https://github.com/noka/getRSS/blob/mas ... hp#L37-L41
ここでしょうか?当てずっぽうですが、get_category()とかかなという気がします。

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

Posted: 2020年4月17日(金) 09:49
by オレンジみかん
yama 様

早速のアドバイスありがとうございます。\(^o^)/
試してみます。

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

Posted: 2020年4月17日(金) 10:33
by オレンジみかん
'category'=> $e->get_category(),
と追加記してみたのですが、うまく表示できませんでした。
「6fb7883d41af12d519774683e9d7a251」と表示されました。

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

Posted: 2020年4月17日(金) 11:32
by yama

コード: 全て選択

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++==$n)break;
}
上記の部分、

コード: 全て選択

foreach ($feed->get_items() as $e ) {
    print_r($e);exit;
    $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++==$n)break;
}
一時的にこのように書き換えて、表示された内容にヒントがあるかどうか見ていただいてよいでしょうか?

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

Posted: 2020年4月18日(土) 03:47
by オレンジみかん
yama 様

上記の通り、記述しましたが、表示ページで以下のようなエラーが出ました。

Parse error: syntax error, unexpected '}', expecting end of file in D:\xampp\htdocs\saijo\manager\includes\document.parser.class.inc.php(2238) : eval()'d code on line 45

当方の環境
modx1.0.22J
xammp 3.2.4
php 7.3

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

Posted: 2020年4月18日(土) 15:49
by noka
オレンジみかん さん
こんにちは。
yamaさま
ご対応ありがとうございます。

phpの環境が異なるので、ちょっとわかりませんが、
https://github.com/noka/getRSS/blob/mas ... se.tpl.php
に更新版をアップしてみました。
[+category+]
[+categories+]
を追加しています。前者は最初の一件のラベル、後者は、すべての所属カテゴリをカンマ区切りで出力してくれるはずです。

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

Posted: 2020年4月18日(土) 17:02
by オレンジみかん
yama 様

自己解決したました。
phpは全くの素人ですが、はじめに投稿した

'category'=> $e->get_category(),



'category'=> $e->get_category()->get_label(),

としたら、うまく表示されました。

noka 様
はじめまして。対応いただき、ありがとうございます。\(^o^)/
当然ですが、nokaさんの更新版のほうが断然良いので早速使わせていただきます。

ps
yamaさん、nokaさん、に感謝感激です。

もう一つ、問題を抱えてまして後でフォーラム投稿いたしますので、
図々しいのですがいろいろとアドバイスをお願いいたしますm(_ _)m

本当にありがとうございました。

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

Posted: 2020年4月18日(土) 17:48
by オレンジみかん
noka 様

更新版で問題が発生しました。
[+categories+]と記述すると、最初のカテゴリ①、2番目①,②、3番目①,②,③とカテゴリが2番目以降重複されて表示されてしまいます。
当方のチャンクテンプレートの記述が悪いのでしょうか?

テンプレートの記述は、
[+categories+]
<h6 class=" bd-textblock-63 bd-content-element">[+title+]</h6>
<p class=" bd-textblock-67 bd-content-element">[+summary:summary(80)+]</p>
<a class="bd-linkbutton-27 bd-no-margins bd-button bd-own-margins bd-content-element" href="[+url+]" target=_blank>Read More</a>

[+category+]は正常です。

引き続き、よろしくお願いします。