Quantcast
Channel: 日本語 » Tag: fetch_feed - Recent Posts

ittto : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

皆様お世話になります。初投稿の初心者のため、手落ちがあるかもしれませんが何卒よろしくお願いいたします。

以下のようなコードで複数のブログのRSSを時系列(最新順)で表示したいと考えています。
ただし、それぞれのブログについては最大3件づつ表示させたい場合、どのようなコードを書けばよいでしょうか。コードの記述例までお教えいただければ大変助かります。

<?php include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed(array(
'RSS1',
'RSS2',
'RSS3',
'RSS4',
'RSS5',
));
if (!is_wp_error( $rss ) ) :
    $rss->set_cache_duration(1800);
    $rss->init();
    $maxitems = $rss->get_item_quantity(15);
    $rss_items = $rss->get_items(0, $maxitems);
    date_default_timezone_set('Asia/Tokyo');
endif;
?>
<?php echo '<h5>各ブログの新着記事 ' . $maxitems . ' 件を時系列で表示しています</h5>'; ?>
<?php if ($maxitems == 0) echo 'No items.';
    else
    foreach ( $rss_items as $item ) : ?>
<?php echo $item->get_feed()->get_title(); ?>

<?php echo $item->get_date("Y-n-j"); ?>  <a href='<?php echo $item->get_permalink(); ?>' target="_blank"><?php echo $item->get_title(); ?></a>
		<br />
	<?php endforeach; ?>

何卒よろしくお願いいたします。


nobita : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

こんにちは

試していませんけど

$maxitems = $rss->get_item_quantity(3);

とかで、取れませんか?

ittto : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

ご回答ありがとうございます!
ただ、現状の
$maxitems = $rss->get_item_quantity(15);
となっている部分をご指摘のように
$maxitems = $rss->get_item_quantity(3);
にしても
全ブログの表示合計が最大3件という形になり、
「各RSSから最大3件、合計表示数最大15件」
という表示にはなりませんでした。

nobita : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

こんにちは

fetch_feedでrssをマージしているのでそうなってしまいますね

一つ一つ、新着を表示するという事では、満足いかないという事かもしれませんね

思いつきでしかありませんが、

パーマリンクのURLからブログを特定して、3回目以降はエコーしないというようなスクリプトを書くとかという事もありそうだと思います

Fumito MIZUNO : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

Fumito MIZUNO : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

試してみました。RSSを2つ引っ張ってくるパターンは問題なく動作しました。(RSSの部分を増やせば5つでもいけると思います)

include_once(ABSPATH . WPINC . '/class-simplepie.php');
$feed = new SimplePie();
$feed->set_feed_url(array('RSS1', 'RSS2'));
$feed->set_item_limit(3);
$feed->init();
$items = $feed->get_items();
foreach($items as $item) {
  echo $item->get_title(); // ここは適宜変更してください
}

ittto : "・feed.php、fetch_feedによるRSS取得のカスタマイズについて"

0
0

php-webさま nobitaさま
誠にありがとうございます!解決しました!!
今後、同じ悩みの方が現れた時のために、アドバイスを元に追記した私のコードを貼っておきます(本件と関係ない部分のコードも入っていますが)。

<?php include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed(array(
'RSS1',
'RSS2',
'RSS3'
));
if (!is_wp_error( $rss ) ) :
    $rss->set_item_limit(3);
    $rss->set_cache_duration(1800);
    $rss->init();
    $maxitems = $rss->get_item_quantity(200);
    $rss_items = $rss->get_items(0, $maxitems);
    date_default_timezone_set('Asia/Tokyo');
endif;
?>

aq-n : "feedの取得:フィードurlの取得"

0
0

お世話になります。

以下のようなソースでRSSを取得しています。
サイドバーに全RSSの中から更新順で5件取得するようにしています。
その場合、最後のループ中でで各ブログのRSSのフィードURLを取り出したいと思っているのですが、
可能でしょうか?

===
■sidebar.php
$rss_url = array(
'URL1',
'URL2',
'URL3'
);

$rss_items=get_rss_data($rss_url,5,$maxitems);
if ($maxitems != 0) {
echo "

    ";
    foreach ( $rss_items as $item ) : ?>
  1. <?php echo $item->get_title(); ?>
      【このループの中で$itemから'URL1','URL2'のようにブログのフィードURLを取得したい】
  2. <?php endforeach;
        echo "

";} ?>

■functions.php
function get_rss_data($rss_url,$dispcnt,&$maxitems) {
include_once(ABSPATH . WPINC . '/feed.php');

$rss = fetch_feed($rss_url);
if (!is_wp_error( $rss ) ) :
$maxitems = $rss->get_item_quantity($dispcnt);

$rss_items = $rss->get_items(0, $maxitems);

return $rss_items;
endif;
}


kopeo1977 : "WP3.4アップグレード後のfetch_feed関数"

0
0

先日WP3.2からアップグレードしたのですが、その後fetch_feedを使って出力していたRSSの出力結果がおかしくなってしまいました。

google newsやtwitterの検索RSSなど、URLに日本語を含んだものをfetch_feedすると結果が0になってしまいます。

・google news rssにおいて『日本語+OR+ワードプレス』など、きちんと結果が帰ってくるはずのフィードURLを投げると『OR』のみの検索結果が帰ってきます。
・キーワードが英数字のみの場合は問題なく結果が出力されます。
・その際返ってくるRSSを見てみると、『日本語』『ワードプレス』の部分が文字化けしていました。
・urlencodeを使ってみましたが変わりませんでした。
・fetch_feedのキャッシュの値を変えてみましたがダメでした。
・fetch_rssの方を試してみましたがダメでした。
・WP Multibyte Patchを1.5に戻してみましたがダメでした。
・関連するファイル(wp-include/class-feed.php、wp-include/class-simplepie.php、wp-include/feed.php)のエンコードを確かめ、古いバージョンのものと差替えてみたりしましたがダメでした。
・WP3.2や3.3.xのままにしている他のサイト(同じレンタルサーバの同じプラン)だと同じコード(テーマのfunction.phpに記述)で動いています。

感覚的にはfetch_feed関数の中で文字化けしているようなイメージなのですが、
手詰まりになってしまい、フォーラムを利用させてもらいました。

宜しくお願い致します。

Fumito MIZUNO : "WP3.4アップグレード後のfetch_feed関数"

0
0

状況の確認をさせてください。

google newsやtwitterの検索RSSなど、URLに日本語を含んだものをfetch_feedすると結果が0になってしまいます。

具体的にはどういうURLでしょうか。

・WP Multibyte Patchを1.5に戻してみましたがダメでした。

WP Multibyte Patchは、プラグイン名だと思われますが、この他にもプラグインを使っているでしょうか。
使っている場合は、それらのプラグインをオフにしても現象が発生するでしょうか。

・WP3.2や3.3.xのままにしている他のサイト(同じレンタルサーバの同じプラン)だと同じコード(テーマのfunction.phpに記述)で動いています。

テーマは twentyten か twentyeleven でしょうか。
それ以外のテーマを使っている場合、twentyten か twentyeleven に戻した場合でも現象が発生するでしょうか。

また、functions.php に記述したコードは具体的にはどのようなものでしょうか。

kopeo1977 : "WP3.4アップグレード後のfetch_feed関数"

0
0

レスありがとうございます。

≪URL≫
http://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=日本語+OR+ワードプレス&output=atom&num=30&hl=ja

http://search.twitter.com/search.atom?q=検索ワード
です。

テーマはtwentytenをベースにカスタマイズしたものです。
ページテンプレートからfunction.phpに記述した関数を呼び出しているので、テーマの変更で戻るかどうかを確認するのはローカル環境で試してみますので後でご報告いたします。(プラグインに関しても)

≪function.php≫
大体以下のような感じです。

function getRssNews($key, $num){
	include_once(ABSPATH .WPINC .'/feed.php');

	$item = (int)$num;
	$keyword = urlencode($key);
	if($keyword){
		$rss = fetch_feed("http://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=$keyword&output=atom&num=30&hl=ja");
		if(!is_wp_error($rss)){
			$rss->set_cache_duration(3600);
			$rss->init();
			$rss_items = $rss->get_items(0, $rss->get_item_quantity($item));
			date_default_timezone_set('Asia/Tokyo');
		}
		return $rss_items;
	}
	return false;
}

宜しくお願い致します。

kopeo1977 : "WP3.4アップグレード後のfetch_feed関数"

0
0

追記です。

ローカルに移してやってみました。
プラグインを全て無効化し、テーマをtwentytenに戻してやってみましたが、やはり同様の症状でした。

先程のURLをFirefoxなどで見るときちんと適切な情報が閲覧できるのですが、
上記コードでfetch_feedを受け取った$rssを見ると、この段階でおかしくなっているようです。
何故だろう???

Fumito MIZUNO : "WP3.4アップグレード後のfetch_feed関数"

0
0

私も getRssNews のコードをコピーしてみましたが、表示がおかしくなりました。

公式マニュアルを読むと下記の記述がありました。

http://wpdocs.sourceforge.jp/Version_3.4#.E5.85.A8.E8.88.AC

RSS フィード内の言語を適切に反映

http://search.twitter.com/search.atom?q=%E6%A4%9C%E7%B4%A2%E3%83%AF%E3%83%BC%E3%83%89
だと、xml:lang="en-US" になるので、
twitter で検索するときに、日本語を選択してあげないといけないのではないでしょうか。(twitter の設定は私は分からないので、twitter のサイトで確認してください。)
google news も明示的な言語設定が無いので、おそらくこれが原因でしょう。

ja.wordpress.org のフィードだと、(フィードの出力に) language ja がはいっているので、こちらは正常に表示されました。
http://ja.wordpress.org/feed/?s=%E3%83%96%E3%83%AD%E3%82%B0

kopeo1977 : "WP3.4アップグレード後のfetch_feed関数"

0
0

なるほど、原因はそれのようですね。
が、twitterもgoogleもlanguage:jpにする術を見つけられませんでした。

googleの方はURLのned=usがフィードの出力言語を指定しているようです。
ned=deなどは通るのですが、肝心のned=jpやned=jaが通らない。。。

となると後は3.4での改良点をソース上で見つけてそれをスルーするようなフィルタリングをするしか無いのでしょうかね。(何かヒントがあれば是非お願いします)

ともあれバグではなくwordpressの改良によるものだと分かりましたので、解決済みとさせていただきます。本当にありがとうございました。

centree : "fetch_feed でgoo blogのフィードが受信できない?"

0
0

v2.8 から採用された SimplePieのコード「fetch_feed」を使って、他のサイトの更新情報を一覧としてサイドバーに表示しています。サイドバーにphpを表示するのにはPHP Code Widgetを利用しています。コードは以下のような感じです。
(参考記事:http://ja.forums.wordpress.org/topic/9219?replies=7

<?php
$Flist = fetch_feed(array(
  'http://example.com/rss/feed/goes/here',
  'http://example.com/rss/feed/goes/here2',
  'http://....'
 ));
if (!is_wp_error( $Flist ) ) :
    $Flist->set_cache_duration(3600);
    $Flist->set_item_limit(1);
    $Flist->init();
    $maxitems = $Flist->get_item_quantity();
    $Flist_items = $Flist->get_items(0, $maxitems);
    date_default_timezone_set('Asia/Tokyo');
endif;
?>
<ol>
<strong>○○○○</strong>
<?php if ($maxitems == 0) echo '<li>No items.</li>';
    else
    foreach ( $Flist_items as $item ) : ?>
	<li style="margin-left:7px;">
		<?php echo $item->get_date("m/d  "); ?><a href='<?php echo $item->get_permalink(); ?>' target="_blank"><?php echo $item->get_feed()->get_title(); ?></a>
	</li>
	<?php endforeach; ?>
</ol>
  1. include_once(ABSPATH . WPINC . '/feed.php'); は自分の環境の場合必要ありませんでした。(すでに宣言されている?)
  2. 同じページにリストを2つ置くので、通常 $rssとなる部分の名前を"$Flist"に変更しています
  3. 投稿日(更新日)と、ブログのタイトルを表示、リンクは最新記事に飛ぶようにした昔のドリコムRSSのようなシンプルなものです。

上記コードでほぼ問題なく表示されるのですが、なぜかgooブログだけうまくフィードを取得できず、表示できません。RSS1.0も、RSS2.0も同様です。苦肉の策で現在のところRSSMIXというサービスを使って再度RSSを作り対応していますが、根本的には解決していません。

興味を持たれた方で、gooブログのRSSフィードを使って検証してくださる方、ヒントや意見を下さる方がいれば幸いです。WPのバージョンは3.4.1、最新版です。


centree : "fetch_feed でgoo blogのフィードが受信できない?"

0
0

自己解決しました。
確証はありませんが、RSSを取得に行くとき、gooブログの方でuser-agentにwordpressの文字が入っていると拒否されているようです。

ユーザーエージェントを書き換えることによってgooブログの方もRSSフィードの読み込みが可能です。

<?php
$Flist = fetch_feed(array(
'http://example.com/rss/feed/goes/here',
'http://example.com/rss/feed/goes/here2',
'http://....'
));
$Flist->set_useragent('●●●'.SIMPLEPIE_USERAGENT);
if (!is_wp_error( $Flist ) ) :
.......

●●●のところは適当な文字を英数字で入れます。

ちまたではUser-Agentの偽装という言い方もされ、不正アクセス防止法などへの抵触も気になりますが、調べてみたところ法令に記される「認識符号」というのはIDやパスワードのことのようで、当面はUser-Agentの変更は同法に抵触しないだろうという認識に至りました。

また、多くのブラウザで(開発目的ではありますが)User-Agentの変更機能が搭載または搭載可能なようですので、現時点では日本でも問題になっていないという判断です。

ご意見あれば返信欄にコメントを残してください。

Hana-harukaze : "外部RSSを読み込んでいる部分で、特定のカテゴリーのみを表示したい"

0
0

はじめまして。WORDPRESS初心者で、書籍やサイトで探しても答えが見つからずに苦慮しています。私は現在、弊社のサイトの管理を行っており、弊社のサイトは外部の業者が作成したもので、WORDPRESSで作成されている部分の修正を行う必要がでてきました。

弊社の新着情報の部分にWORDPRESSが組み込まれており、弊社で更新している新着情報をどうやら外部RSSとして読み込むための設定がされているようです。
fetch_feed関数?が使用されており、rss.phpの中身を表示するような形になっています。
そこで、rss.phpの部分で、例えばjobというカテゴリーのみを抽出したい場合は、どのように修正すればよいでしょうか。わかりにくい質問かもしれませんが、よろしくご教示ください。
なお、rss.phpのコードは以下のとおりです。

`<?php
require_once 'news/wp-blog-header.php';
include_once ABSPATH.WPINC.'/feed.php';

$rss = fetch_feed(get_bloginfo('url')."/feed");
if (!is_wp_error( $rss ) ) { // ちゃんとフィードが生成されているかをチェックします。
$rss->set_cache_duration(600);
$rss->init();

// すべてのフィードから最新5件を出力します。
$maxitems = $rss->get_item_quantity(12);

// 0件から始めて指定した件数までの配列を生成します。
$rss_items = $rss->get_items(0, $maxitems);
}
?>

<h3><a href="<?php bloginfo('url') ?>">詳しく見る</a></h3>
<table width="0" border="0" cellspacing="0" cellpadding="0">
<?php foreach($rss_items as $item) : ?>
<?php $cat = $item->get_category() ?>
<tr>
<th class="label-<?php echo $cat->term == 'ニュース' ? 'news' : '' ?><?php echo $cat->term == '未分類' ? 'no' : '' ?><?php echo $cat->term == '求人情報' ? 'job' : '' ?>"><p><?php echo $cat->term ?></p></th>
<td><strong><?php echo $item->get_date('Y年m月d日') ?></strong><a href="<?php echo $item->get_permalink() ?>"><?php echo $item->get_title() ?></a></td>
</tr>

<?php if($key == 5) : break; endif ?>
<?php endforeach ?>
</table>`

jim912 : "外部RSSを読み込んでいる部分で、特定のカテゴリーのみを表示したい"

0
0

jobというカテゴリーのみを抽出したい場合

どの段階で抽出したいのかわかりませんが、

$rss = fetch_feed(get_bloginfo('url')."/feed");

の部分を

$rss = fetch_feed( get_category_feed_link( n ) );

※ nは、jobカテゴリーのID

にすれば、jobカテゴリーのRSSを読んで表示するようになります。

Hana-harukaze : "外部RSSを読み込んでいる部分で、特定のカテゴリーのみを表示したい"

0
0

jim912様、早速ご回答ありがとうございました!無事にjobカテゴリーのみを表示することができました!
誠にありがとうございました!

kflf5004 : "fetch_feed によるRSSの取得について(3件以上のURLが読み込めない)"

0
0

皆様、はじめまして。

現在HPを制作しておりますが、大きく挫折しておりまして、
どなたかお知恵を貸していただけないでしょうか?

fetch_feedを使用して、複数のRSSから各1件の最新の投稿を取得し、
表示するページを制作しております。

以下、そのコードです。

<?php include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed(array(
'URL1',
'URL2',
'URL3',
));
if (!is_wp_error( $rss ) ) :
$rss->set_item_limit(1);
$rss->set_cache_duration(1800);
$rss->init();
$maxitems = $rss->get_item_quantity(200);
$rss_items = $rss->get_items(0, $maxitems);
date_default_timezone_set('Asia/Tokyo');
endif;
?>
<?php if ($maxitems == 0) echo '<p>No items.</p>';
else
foreach ( $rss_items as $item ) :
?>

上記のコード自体は問題なく動作しています。
ローカル環境でしても希望通りの動作をしているのですが、
サーバーにアップしたところ、
3件以上のRSSのURLを追加した場合にRSSを取得できず、
「No items.」が表示されてしまいます。

PHPなどサーバーの影響だと思うのですが、
その場合、どのように設定を変更すれば良いのでしょうか?

サーバー:ロリポップ
PHPのバージョン:5.3

<動作するパターン>
・サーバー環境
①RSSのURLを2つ登録した場合
②RSSのURLを3つ登録(そのうち2つは同一のURL)した場合
・ローカル環境(XAMPP)
①RSSのURLを7つ登録

<動作しないパターン>
・サーバー環境
①RSSのURLを3つ以上登録(全て違うのURL)した場合

なお、他のプラグインの干渉も考え、
キャッシュ関係のプラグインを停止してみましたが、
結果は変わりませんでした。

ご教授の程よろしくお願い致します。

jim912 : "fetch_feed によるRSSの取得について(3件以上のURLが読み込めない)"

morisawakzu : "fetch_feedによるRSS取得のサイト毎の件数カスタマイズについて"

0
0

皆様お世話になります。初投稿の初心者のため、情報不足等あるかもしれませんが何卒よろしくお願いいたします。

複数のブログのRSSを最新順で表示したいと考えています。
ただし、ブログごとに最大件数を設定したい場合どのようなコードを書けばよろしいでしょうか。

コードの記述例をお教えいただければ大変助かります。

<?php
	include_once(ABSPATH . WPINC . '/feed.php');

	$display_posts_count = 10;
	$get_posts_count = 40;
	$rss= fetch_feed(array(
		'rss1', // feed1
		'rss2', // feed2
		'rss3'  // feed3
	));

	$counter = 0;
	if (!is_wp_error( $rss) ) :
		$maxitems = $rss->get_item_quantity($get_posts_count);
		$feed_items = $rss->get_items(0, $maxitems);
	endif;
?>
<ul class="blogroll_entries">
	<?php if ( $feed_items == 0 ) echo '<li>新しい記事はありません</li>';
		else
		foreach ( $feed_items as $item ) :
		if( !preg_match('/^PR:/', $item->get_title() ) && $counter < $display_posts_count ):
	?>
	<li class="box-border">
		<a href="<?php echo $item->get_permalink(); ?>" target="_blank" class="blogroll-link"><div class="blogroll_entry"><?php echo $item->get_title(); ?></div></a>
	</li>
	<?php
		$counter++;
		endif;
		endforeach;
	?>
</ul>

上記を元に色々とカスタマイズをしてみたのですが、うまく動きませんでした。
RSSの取得をして結合するところかなと思ったのですが頓挫しております。

よろしくお願いいたします


Daisuke Takahashi : "fetch_feedによるRSS取得のサイト毎の件数カスタマイズについて"

0
0

is_wp_error( $rss )がtrueになってませんか?

あと、$rss->get_items()で使用する項目の数を指定しているので、$counterを使った$counter < $display_posts_countというチェックは不要です。

downhillagogo : "カスタムフィールド値でfetch_feed取得するrssを選択したい"

0
0

お知恵をお貸しください!
fetch_feedを使って外部rssを表示しているのですが、投稿毎にカスタムフィールドの値で取得するRSSのURLを選択したいと思っています。
具体的にはEC-CUBEで商品カテゴリ別のRSSを出力していて、
ドメイン/rss/product.php?category_id=xx
上記のxxの部分をカスタムフィールドテンプレートを使って入力した値にしたいのです。

よろしくお願いします。

gblsm : "カスタムフィールド値でfetch_feed取得するrssを選択したい"

0
0

どの部分でつまづいていらっしゃいますか?

downhillagogo : "カスタムフィールド値でfetch_feed取得するrssを選択したい"

0
0

gbismさま、レスありがとうございます。

前に下記のような感じで、カスタムフィールドから投稿idを取得し、query_postsで別投稿の内容を投稿内で表示したことがあって、同じ感じで出来るのかな?と思ったのですが、、
-----------------------------------------------
<?php if(post_custom('pro_id')): ?>
<?php echo get_post_meta('pro_id'); ?>
<?php
$recommend = get_post_meta($post->ID, 'pro_id', true);
?>
<?php query_posts(array(
'post_type' => array('post', 'カスタム投稿タイプ'),'posts_per_page'=>1,'post__in' => explode( ',', $recommend) ,'order'=>DESC)); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
------------------------------------------------

これと下記のfetch_feedの表示部分と組み合わせたら表示出来るのではと思ったのですが。
------------------------------------------------
<?php
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed('ドメイン/rss/product.php?category_id=xx');
if (!is_wp_error( $rss ) ) :
$maxitems = $rss->get_item_quantity(6);
$rss_items = $rss->get_items(0, $maxitems);
endif;
?>
-------------------------------------------------
組み合わせ方が分かりません。まったく的外れでしょうか?

gblsm : "カスタムフィールド値でfetch_feed取得するrssを選択したい"

0
0

カスタムフィールドの取得は大丈夫ですね。ではカスタムフィールドの値がカテゴリー ID になっていて、それを変数 $catid へ入れたとしましょう。その後に、今のコード

$rss = fetch_feed('ドメイン/rss/product.php?category_id=xx');

の代わりに

$rss = fetch_feed( 'ドメイン/rss/product.php?category_id=' . $catid );

と書けば xx の部分がカスタムフィールドの値に変わります。

downhillagogo : "カスタムフィールド値でfetch_feed取得するrssを選択したい"

0
0

gblsmさま。
出来ました!
ありがとうございます。
$catidを''の外に書くのと、. が必要なのですね。





Latest Images