Home > Tags > PHP
PHP Tag Archive
WordPress の更新内容を mixi へ投稿するスクリプト RSS2mixi with MagpieRSS
- 2008-10-03 (金)
- WordPress
ブログのエントリーをmixi日記に自動投稿する「RSS2mixi」 ::: creazy photograph で配布されているスクリプト RSS2mixi をちょっと改造して本文から画像データを抜き出せるようにしてみました。
元スクリプトでは description を見ているためか、WordPress の吐く RSS では画像を使っていても、そこまでスクリプトが読んでくれないので*1 どうにかこうにかしてみようとしたのが、MagpieRSS を用いて RSS をパースするという方法。
他ライブラリを使うのでシンプルではなくなるのですが、もともと便利なスクリプトだし、どうせ自前のサーバで動かすので、ちょっと富豪的にしてみました。
元スクリプトは PHP5 の SimpleXML を使っていますが、その部分を MagpieRSS にお任せしているので、PHP4 でも動くかもしれませんね。
MagpieRSS 導入方法
MagpieRSS のファイル群は RSS2mixi と同じ場所に magpierss というディレクトリを作成して保存してあります。
rss_fetch.inc を直接書き換え MAGPIE_OUTPUT_ENCODING の値を ‘UTF-8′ にしてあります。
その他、環境に応じてキャッシュディレクトリなどの書き換えを行います。
RSS2mixi の使い方
設定はスクリプト自体を書き換え、フィードの URL や mixi へのログイン情報、ID などを記入します。
$posted_file および $img_tmp_file で指定するファイルは、予め作成しておくのが良いようです。
設定が完了したら cron で定期的にスクリプトを実行すれば、新規に投稿されたエントリの内容を mixi に複製してくれるはずです。
ソースコード
/** * RSS2mixi with MagpieRSS * * RSS読み込んでmixi日記に自動投稿します。 * * original script @author yager <yager[ at ]creazy.net> * http://creazy.net/2008/08/rss2mixi_php.html * * custmized by yuuichi <u1 [ at ] u-1.net> */ mb_language("japanese"); mb_internal_encoding("UTF-8"); require_once 'Services/MixiAPI/Diary.php'; require_once 'Services/MixiAPI/Image.php'; require_once 'Services/MixiAPI/Factory.php'; require_once './magpierss/rss_fetch.inc'; error_reporting(E_ALL); //------------------------------------------------------------ // Settings //------------------------------------------------------------ /** * RSS設定 */ $rss = ''; //ブログのRSS /** * mixi設定 */ $user = ''; //ログインID $pass = ''; //パスワード $id = ''; //mixi ID /** * 送信済みエントリーをストアしておくためのデータファイル * @memo 別のファイル名で設置した場合はここを修正してください。 * 書き込み権限を与えておく事を忘れずに。 * chmod 666 {データファイル名} */ $posted_file = './rss2mixi.link.database.txt'; $img_tmp_file = './rss2mixi_tmp_file.jpg'; //------------------------------------------------------------ // Get data //------------------------------------------------------------ // 登校済みのURLのデータファイルを読み込み $posted_links = explode("\n",file_get_contents($posted_file)); // MagpieRSSによるRSSの展開 $root_ = fetch_rss($rss); $title = $root_->channel['title']; $items_ = array(); foreach ( $root_->items as $item ) { $items_[] = $item; } rsort($items_); //------------------------------------------------------------ // Post mixi //------------------------------------------------------------ foreach ( $items_ as $item ) { // すでにポスト済みの記事はスキップ if ( in_array($item['link'],$posted_links) ) continue; $title = $item['title']; $title = "ブログを更新しました : ".$title; $link = $item['link']; $description = $item['description']; $fulltext = $item['content']['encoded']; // 添付画像URL取得 $matches = array(); if ( preg_match('/<img.*?src=[\'\"](.*.jpg)[\'\"].*?>/i',$fulltext,$matches) ) { // JPEGのIMGタグがあったら添付画像として $photo_url = $matches[1]; echo $photo_url . "<br />\n"; } // 本文の成形 $description = preg_replace( // 画像タグはカメラアイコン+URL '/<img.*?src=[\'\"](.*?)[\'\"].*?>/ie' ,"'([m:133]$1)'" ,$description ); $description = preg_replace( // リンクタグはPCアイコン+TinyURL '/<a.*?href=[\'\"](.*?)[\'\"].*?>(.*?)<\/a>/ie' ,"'([m:196]$2:'.tinyurl('$1').')'" ,$description ); $description = strip_tags($description); $description = $description."\n\n".$link; // debug echo $title . "<br />\n"; echo $link . "<br />\n"; echo "<pre>".$description."</pre><hr />\n"; // mixiにポスト $diary = new Services_MixiAPI_Diary($title, $description); if ( $photo_url ) { if ( $fp = fopen($img_tmp_file,"w") ) { fwrite($fp,file_get_contents($photo_url)); fclose($fp); } $diary->setImage(new Services_MixiAPI_Image($img_tmp_file)); } $service = Services_MixiAPI_Factory::getInstance( Services_MixiAPI_Factory::API_MODE_POSTDIARY, $user, $pass, $id); $service->setDiary($diary); $service->execute(); // ポスト済みに登録 if ( $fp = fopen($posted_file,"a") ) { fwrite($fp,$item['link']."\n"); fclose($fp); } } /** * TinyURL変換関数 * @param String $url 変換したいURL * @return String 変換後のTinyURL */ function tinyurl($url) { $tiny = file_get_contents('http://tinyurl.com/api-create.php?url='.urlencode($url)); return $tiny; }
参考リンク
以下のURLを参考にスクリプトを改造させていただきました。感謝。
- ブログのエントリーをmixi日記に自動投稿する「RSS2mixi」 ::: creazy photograph
- MagpieRSS - PHP で使える RSS パーサー。
- MagpieRSSを使ってPHPで簡単RSSパース - TechMemo
- これは SimpleXML の制限ぽいですね。PHP での SimpleXML 処理 [↩]
- Comments: 1
- Trackbacks: 0
WordPress には最適かもしれない拍手ツール 【GJ!】
エントリ内に含めてある Web 拍手 のツールですが、PatiPati 経由で Web Clap を現在使用しています。Web Clap は拍手を送ったエントリ名を記録することができるので便利なのですが、個人的に良さそうだなあと思っているのはFC2ブログ 拍手みたいなヤツでした。
以前、Web 拍手ツールを探したときは、こういうタイプのが見つからなかったんですが、ついに見つけました。その名も GJ!
- ブログに特化したWeb拍手なので、どのエントリーに対する拍手なのかが判る
- 拍手数を拍手ボタン上に合成することで、拍手数がわかりやすい
- 拍手数をXMLで出力(ブログパーツなどに使えます)
- ボタングラフィック差し替え可能
- コメント閲覧画面(パスワード設定可能)完備
といった特徴があるように、ブログでの使用を前提にした設計になっているので、それなら WordPress に組み込んでやろうってことで、やってみました。配布ページでも WordPress 用のテンプレートの編集方法の解説ありますしね。
んが、ちょっとハマった部分といじった部分がありますので、備忘録的にメモしておきます。
- Comments: 0
- Trackbacks: 3
PHP5 へアップグレード
- 2007-09-11 (火)
- コンピュータ
MediaWiki を試してみたかったので、Vine 3.2 の PHP を4から5へアップグレードしました。
デフォルトだと WordPress の投稿が化けてしまうのと一部のプラグインが動かなくなるので、php.ini を
short_open_tag = On mbstring.internal_encoding = UTF-8 memory_limit = 64M
のように書き換えました。
また、LiveCommentPreview が
PHP Notice: Undefined variable: livePreviewDivAdded in wp-content/plugins/live-comment-preview.php on line 24
みたいなエラーを吐いたので、該当の
$livePreviewDivAdded == false;
をコメントアウト。とりあえず動いてるっぽいです。
- Comments: 0
- Trackbacks: 0
MySQL 4.0.x 系統から 5.0.x 系統へのWordPress データベースの移行
会社のマシンがいろいろあって今時のスペックのものに変わったので、これまでローカルで xampp for windows を使ってカスタマイズとか実験とかしていた WordPress の環境を、仮想PC にインストールした Vine 4.1 上に移すために試行錯誤。
問題になるのはやはり MySQL のバージョンが、既存の環境では 4.0.25 (Vine 3.2) で、Vine 4.1 では 5.0.27 となっていること。そもそも 4.0.x 系統と 4.1.x 系統の間でも断絶があったりするのに、一気に 5.0.x 系統へのアップグレードは不安が残ります。
最小インストールした Vine 4.1 に Apache2 やら PHP4 やら MySQL やらを apt-get で突っ込んで、必要なプログラムのインストールを確認した後に、 4.0.25 からデータベースを mysqldump でダンプして、インポートしてみました。
素の状態でインストールしたときは、見事に文字化け。やはり上手くはいかないようで。
my.cnf の書き換えで対応
で、MySQL 文字化け でぐぐると、それっぽい情報がたくさん出てくる出てくる。MySQL で使われる文字コードを統一して、余計なことをしないようにするのが無難なようで、MySQL5にACCESSやADO.NETでアクセスした際に、文字化けをしないようにするのは?~MySQL関係 を参考に、以下のようにすると文字化けは解決しました。my.cnf は 初期状態では存在しなかったので、
$ cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
としてやって作成しました。以下はその my.cnf に対して追記した内容です。
[client] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8
それぞれの設定箇所に、 default-character-set=utf8 を追加してやり、MySQL を再起動。skip-character-set-client-handshake はクライアント/サーバー間でのキャラクターセットの変換を行わないというオプションのようですね。これで、サーバ内では文字コードが UTF-8 に統一されたはず。
その後、データベースの作成も、
mysql> CREATE DATABASE データベース DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
としてやることで、文字コードを UTF-8 と指定。
そうしてからのインポートでは無事に文字化けもせずに内容が表示されるようになりました。
使用した WordPress のバージョンは 2.2.1 の本家版。日本語リソースを突っ込んで日本語化したものです。
最初 PHP は 5 を入れたんだけれど、動かないプラグインがあったりで、結局は 4 系統(4.4.7)に戻しました。php.ini 内の mbstring については編集する必要もなく、デフォルトの設定で動きました。ただ、memory_limit = 8MB では PHP Fatal error: Allowed memory size of 8388608 bytes exhausted とか出て途中で落ちてしまったので、そこだけ 64MB に変更して稼働させています。
さて、仮想環境でも問題なく動くようなら、サーバの OS もアップグレードしたいところだなあ。もう1台マシンを調達して交換の準備をするとしますかね。
- Comments: 0
- Trackbacks: 0
Home > Tags > PHP
