2012年11月14日水曜日

Blogger の RSSで記事を作るPHP LIKE付

PHPを勉強して、いろんなブログの情報を抜き出して表示させることなどを楽しんで来たのですが、そのうち挑戦しようと思って、なかなかできなかったblogger の情報を利用して、写真のような写真と記事を表示させるようなものを作ってみました。 参考記事はこちら。

でも、参照先では写真が出ない。strip_tags() でタグを抜いて、タイトルにリンクを貼るだけのものなのです。

で、blogger のRSSは、先頭のみ、最初の区切りまで(もっと読むの前まで) 全部と 出し方を選べるのだというのを今回初めて知りました。


これを「先頭のみ」にしていると、いろんなRSSの出し方で頑張っても画像を含む本文部分が出ないので悩むことになります。で、ちなみにfeed banner は関係ない。ここだけでOK.
現代数学社様のホームページは、そろそろ10年になるのですが…リニューアルをと言うのですが、現状で満足しているということでして…しかし、新刊情報をそのままhtmlに書くのはもったいないと思い、bloggerのブログに私が半ば勝手にしたのであります。

で、ブロガーにしたほうが、いいね!とかもつけられるしいいんですよ~。みたいなことを言うとり、
そのRssを利用して、トップページに自在に出すというのを、いつかしようと思いながら、なかなかめんどくさくてできなかった。





<?php
mb_internal_encoding('EUC-JP'); //ホームページのプログラミングがすべてEUCなので一応…関係ないみたい?

$rss = simplexml_load_file("http://gendaisugaku.blogspot.jp/feeds/posts/default?alt=rss");  //これで普通に出る

 //channel → item で切り出し

$i = 0;
foreach ($rss->channel->item as $item){
    if(++$i>4) break;
$date = mb_substr($item->pubDate, 5, 11);
$date = explode(" ", $date);
$date = $date[1].".".$date[0].".".$date[2];

if($item->title==""){$title="NonTitle";}
else{$title = $item->title;}


//参考先のようにstrip tagsでタグを抜き出さずに…そのまま抜き出したのを作る
// $htmlt = strip_tags($item->description);

$photo = (string)$item->description;

//条件で写真を抜き出し。
preg_match_all('<img border=\"0\" height=\"320\" src=\"http:\/\/(.*).jpg\"+?>',$photo,$pdata);


// <blockquote> で囲んでいるのを抜き出す(本の情報の部分)

preg_match_all('/<blockquote>(.*?)<\/blockquote>/s',$photo,$txtmeta);


//切り出した最初の写真を格納する print_r($pdata) で解析した。

$photomd= $pdata[0][0];
$txt = mb_convert_encoding($txtmeta[0][0],"EUC-JP","auto");
$title = mb_convert_encoding($title,"EUC-JP","auto");

//切り出した最初の写真のサイズを変更
$photomd2 = str_replace("320","110",$photomd);

 // blockquote を divに置き換え

$txt2 = str_replace("blockquote","div",$txt);

echo "<div style=\"float:left;\padding-right:15px;padding-top:10px;padding-left:5px;\"><a href='" . $item->link . "'><".$photomd2."/></a></div>";

echo "<div style=\"margin-top:7px;width:280px;\"><p><a href='" . $item->link . "'> " . $title . "</a></p></div>";

print "<small>".$txt2.$date."</small>";

print "<div style=\"clear:left;margin-bottom:8px;\"></div>";

print "<img src=\"http://www.gensu.co.jp/image/line.gif\" /><br/>";

}
?>

セキュリティがいいという PHP5.3にしてみましたが、正規表現のパターンマッチで使うsplit()が使えなくなっており、explode()にした。


utf-8じゃないと、RSSは分析できないので、結果をEUC-JPに変換しないとうまくいかない。

今回も勉強になりました…

ついでにface-bookをつけてみた。  参考blogger にカウントボタン付け方
html5 で作る。
phpじゃない部分にスクリプトを書き…


print "<div class=\"fb-like\" data-href=\"".$item->link ."\" data-send=\"true\" data-layout=\"button_count\" data-width=\"450\" data-show-faces=\"false\"></div>";
print "<div style=\"clear:left;margin-bottom:8px;\"></div>\n";

.$item->link . のところにリンクがあることで この場合 いいねの数とシェアが表示される。
結構便利になりました。

これ、いろいろ応用できるよねと…

でもブロガーは今は公開していないiflameタイプになるらしい… なるほどねぇ。

正規表現の切り出し方は…今回も検索でゲットしたが、どうしてこうなるのかはいつもわからない。

今回、友達に教えてもらったMicrosoft WebMatrix というのでやってみたが、確かにインストールが簡単であるが…。なんかはまるとめんどくさいというか…。

私の場合、なぜかphpがうまく動かず、そうかword pressを入れたらいいのかと思ったりしたが途中で止まるので最初から入れなおしたりした。

内容が今一つわからないから、つまづくとめんどくさい。
スマートでわかりやすいけど。いちいち起動してやらないといけないのがめんどくさいかも。
でも、php書きやすかった。

ちょっとでもエラーあったら、エラーがあると表示されるわけじゃなく、なんかわからんけど表示されないと出るので、きちんと;などを忘れずに書く必要がある。

まぁ。いろんなCMSを一発でインストールできるのは確かに便利ですね。


フェイスブック
離れあると思う
-->

今回、あんまりわかってなかったLIKEボタンについて研究しまして…
このブログのテンプレートにはどなんしてもいいねボタンはつかなかった。
が、これをやってみたらつきました!

わかんね~ blogger やはりタグは超複雑だから、めんどくさいが、この★評価みたいなlikeの数とか、ツイートの数いうのは確かに一つの指標になるので、大切だなと思う

ツイッターカウントもここを見てつけてみました。 すぐ反応しないのは、やはりuserが多いからでしょうか。 data-lang='ja' にすることで日本語にできた。 ちょっともっさい。 これをトップページもshareButtons みたいに載せてクリックしてもトップじゃなくて、その記事単体のリンクで表示できるようにはいつかしてみたいが…。できると思うけど、このshareButtons はgoogle が独自でプログラム書いてるみたいですね。

ちなみに、その後、近畿宮崎県人会の盛り上がるブログでもやってみました。


<?php
//こっちはfeedburner 作っていた。すると普通のrssは使えない
$rss = 'http://feeds.feedburner.com/kinkimiyazakiphotos';

$data = simplexml_load_file($rss);
$i = 0;
foreach ($data->channel->item as $item){
    if(++$i>3) break;
$date = mb_substr($item->pubDate, 5, 11);
// strtotimeで日付を Unix タイムスタンプに変換し、date で日付の表示を変換
$date = date('Y/m/j', strtotime($date));
$date = explode("/", $date);
$date = $date[0]."年".$date[1]."月".$date[2]."日";

if($item->title==""){$title="NonTitle";}
else{$title = $item->title;}


$htmlt = strip_tags($item->description);
$photo = (string)$item->description;
//どうしても<img からは正規表現でヒッパレなかった…orz
preg_match_all('/src="http:\/\/(.*.(jpg|JPG|png))"[^\/>]*?\/?>/sU',$photo,$pdata);

echo "<div style=\"margin-top:15px;\"><a href='" . $item->link . "'><img ".$pdata[0][0]. "<br />" ;
echo  "<div style=\"padding-top:3px;\">".$title . "</a> <font size=\"2\" color=\"#0099ff;\">".$date."</font></div></div>\n";

}
?>

このようなことでもすぐわからないので、いつものようにPHP pro にお世話になった…
ああ、1日中こんなことばかりをしていたい~。 面白すぎる!

この頃、google site の可能性が非常におもしろく、そればかりで作っているのですが、phpでパーツを作ったものをgoogle site に貼るのは、しかたないけどサーバーが必要で、そうなってくるとiflameにしたほうがいいようです。

こういうのを見つけておもしろいなと思ってやってみたけどダメだった。説明してもらっているのではできるので、こういうことかなと思いながらもちょっとまだわからない。
結局google の IG_FetchFeedAsJSONなど、オリジナルjavaを覚えるのがいいのだなと思った。
これってどこで勉強したらいいんですか?


iGoogle ガジェットの作り方 : 基本ライブラリ - WebOS Goodies


この前買って
よかったです

この会社に連絡取って作り方教えてもらおうかなぁ…

もう本ばっかり買って、半分も読めないので…。暇があったらやるぞとメモ。


それにしてもこれは大変な時代が来たよと思いますね。安い!安いぞKindle!
Kindleで読める本とかも増えてきたみたいですし…。もうね。たまりませんわ。
こういう時代に生き残れる会社を支えられる自分になりたいといつも思い、そのためにはこれを買わないと!みたいな?





お問合せフォーム

お名前 :
Email: (必須)
メッセージ: (必須)

 約束しないと、送信できません。再度の場合はリロードが必要です。


0 コメント :

コメントを投稿

コメントありがとうございます。


サイト内検索


View My Stats