Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 開発実績

ブログのエントリーをGREE日記に自動投稿する「RSS2GREE」

投稿日:


最近、マザース上場が決まったからという訳ではないですが、GREEを結構使っています。
@see GREEはSNSから携帯ゲームサイトに方向転換してマザーズ上場!?
で、GREEの日記はだいぶ前にこのブログのRSSを読み込むように設定したままだったのですが、mixi同様外部ブログの場合は画像が見れなかったりするので、このままで読みにくいかなと感じました。
そこで、以前にmixi用に作った「RSS2mixi」と同じようなスクリプトをGREE用にも用意してみました。

RSS2GREEの下準備

日記設定を「GREE日記を設定する」にする
日記設定
RSS取り込みではなく、GREE日記を使うようにします。
これをやると、過去の日記は消えてしまうかもしれませんのでご注意を。
「携帯メールから日記投稿」用アドレス取得
GREEには日記投稿するAPIが見当たらなく、外部から日記投稿するにはPEAR::HTTP_ClientかなんかでWebアクセスをシミュレートしないといけないかと思っていましたが、唯一外部からの投稿方法として「携帯メールから日記投稿」機能がありました。今回はこれを使うので専用アドレスを取得しておきます。
日記投稿用アドレス
日記の投稿画面の左側に「携帯メールから日記投稿」用アドレスがあるので控えておきます。
PHPから添付メールを送るためのライブラリ「PHPMailer」を設置
PHPから添付ファイル付き(&mbstringがからんでいる)メールを送るのは結構めんどうなコードになるので、PHPMailerというメール送信用ライブラリを使ってみます。下記ページからスクリプトをダウンロードして適当なディレクトリに設置しておいてください。
Codeworx Technologies

RSS2GREEの設置

下記のファイルを「rss2gree.php」などと名前をつけてサーバーに設置してください。

<?php
/**
* RSS から GREE の日記に登録するスクリプト
*/
require "/path/to/library/phpmailer/class.phpmailer.php";
error_reporting(E_ALL);
//------------------------------------------------------------
// Settings
//------------------------------------------------------------
/**
* RSS Settings
*/
$rss  = 'あなたのブログのRSS URL';
/**
* GREE Settings
*/
$gree_mail_to   = '携帯メールから日記投稿用メールアドレス';
$gree_mail_from = 'GREEに設定したあなたの携帯メールアドレス';
/**
* System Settings
*/
$posted_file    = './rss2gree.link.database.txt';
$title_max      = 24;
//------------------------------------------------------------
// Get data
//------------------------------------------------------------
$posted_links = explode("\n",file_get_contents($posted_file));
$root  = simplexml_load_file($rss);
$items = array();
foreach ( $root->channel->item as $item ) {
$items[] = $item;
}
// 古いものから処理するために順番を逆転
rsort($items);
//------------------------------------------------------------
// Post Mixi
//------------------------------------------------------------
foreach ( $items as $item ) {
// すでにポスト済みの記事はスキップ
if ( in_array($item->link,$posted_links) ) continue;
// 投稿データ
$title       = $item->title;
$link        = $item->link;
$description = $item->description;
$photo_url   = '';
if ( mb_strlen($title,'UTF-8') > $title_max ) {
$title = mb_substr($title,0,$title_max-1,'UTF-8') . '…';
}
// 添付画像URL取得
$matches = array();
if ( preg_match('/<img.*?src=[\'\"](.*.jpg)[\'\"].*?>/i',$description,$matches) ) {
$photo_url = $matches[1];
echo $photo_url . "<br />\n";
}
// 本文の成形
$description = preg_replace(
'/<img.*?src=[\'\"](.*?)[\'\"].*?>/i'
,'([emoji id="74"]: $1)'
,$description
);
$description = preg_replace(
'/<a.*?href=[\'\"](.*?)[\'\"].*?>(.*?)<\/a>/ie'
,"'([emoji id=\"66\"]$2:'.tinyurl('$1').')'"
,$description
);
$description = strip_tags($description);
$description = preg_replace(
'/\[emoji\sid=\"(.*)\"\]/'
,'<emoji id="$1">'
,$description
);
$description .= "\n";
$description .= "--- この記事は「".$root->channel->title."」からの転載です ---\n";
$description .= $item->title . "\n";
$description .= $item->link . "\n";
// debug
echo $title . "<br />\n";
echo $link . "<br />\n";
echo "<pre>".$description."</pre><hr />\n";
//メール送信処理(PHPMailer)
$mail = new PHPMailer();
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";
$mail->AddAddress($gree_mail_to);
$mail->From = $gree_mail_from;
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($title,"JIS","UTF-8"));
$mail->Body    = mb_convert_encoding($description,"JIS","UTF-8");
//添付ファイル追加
if ( $photo_url ) {
if ( $fp = fopen("gree_temp_file.jpg","w") ) {
fwrite($fp,file_get_contents($photo_url));
fclose($fp);
}
$mail->AddAttachment("gree_temp_file.jpg");
}
if (!$mail->Send()){
echo("メールが送信できませんでした。エラー:".$mail->ErrorInfo);
}
// ポスト済みに登録
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;
}
?>

$rss、$gree_mail_to、$gree_mail_from の各変数を自分のものに変更してください。
あとは、上記スクリプトをcronかなんかで定期的に実行すればOKです。

Tip’s

解説というほどではないですが、何点か注意点を書いておきます。
PHP5じゃないと動きません
RSSのパースにSimpleXMLを使っているのでPHP5以上じゃないと動きません。
PHP4の人は別のパーサーに置き換えてみてください。
メールの送信元(from:)を自分の携帯メールアドレスにする
GREEのメール投稿機能はあくまで「携帯から」送信される事を前提としているようで、from:に登録している携帯メールアドレスを登録しないとうまく動きませんでした。GREEは携帯メールアドレス必須なのでみなさん登録していると思いますが、それを入れればOKです。
メールタイトルが24文字までしか入らない?
GREE日記のタイトルは「全角30文字以内」となっているので、スクリプトでは30文字を超える場合は後ろを「…」などにして切り取ってみました。しかし、実際は24文字までしか受け付けてくれなかったので最大24文字で切る用に設定しています(>$title_max変数)
GREEで絵文字を使う
GREEは携帯絵文字に対応しており、このスクリプトでもアイコン代わりに使っています。
「<emoji id="絵文字番号">」な感じで送ったらうまく行きましたが、絵文字番号はPCで見てみて絵文字画像のファイル番号なんかをみればGREE絵文字のIDが分かります。ちなみに、
カメラアイコン:<emoji id="74">
PCアイコン:<emoji id="66">
でした。
他にも「<emoji id="docomo:16進数">」とかの指定もできましたが、深追いはやめましたw
PHPMailerの書き方
メール処理めんどくさがって、ライブラリ使ってしまいました。使い方などはこちらが詳しかったです。
PHPで日本語メールを送る – 応用編 (添付ファイル、HTMLメール) – EC studio 技術ブログ
PEAR::Mailとかに代用しても動くと思いますのでやってみてください。

まとめ

そういえばメールからの投稿ならmixiでも同じような仕組みでできそうですね。
GREE日記では添付ファイル3つまでいけるみたいですが、このスクリプトでは1個しか対応していないのでその内やってみたいです(ファイル容量200MBの上限もあるので1枚で十分かもしれないですが)。
適当なスクリプトですが、興味ある方使ってみてください。

GREEはSNSから携帯ゲームサイトに方向転換してマザーズ上場!?
mixi日記と外部ブログの微妙な関係
ブログのエントリーをmixi日記に自動投稿する「RSS2mixi」
mixi日記投稿用APIを使ってPHPからmixi日記にポスト

-PHP, 開発実績

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

Twitterのリストをタグクラウド風に見やすくするブックマークレット「Twitter Lists Cloud」

先週、公式に開始した Twitter のリスト機能ですが、すでにたくさんのリストが作成されてみなさん有効に使っているようですね。リスト機能の使い方などについては色んなところに書かれていますのでこのエン …

「Timeline Chart in Hatebu Entry」でブクマされたタイミングをグラフ化して解析

はてなブックマークネタが続いております・・・。 はてなブックマーク非表示コメントを表示するBookmarkletを作っている時に、id:amachangが作ってたPathtraqのチャートを出すグリモ …

no image

動画を楽しもう!(Youtubeの動画を片っ端からダウンロードするブックマークレット)

Youtubeの動画をダウンロードするツールはたくさんありますが、下記サイトに紹介しているように非常に簡単にFLV形式でダウンロードできます。 どうやらすでに内部的にも Google とくっついている …

no image

mixi日記投稿用APIを使ってPHPからmixi日記にポスト

via: mixi for iPhoneから発掘されたmixi日記投稿用API « ku という事で、iPhone用のアプリをキッカケにmixi日記にポストできるAPIが見つかったそうです。Perlの …

no image

動画を楽しもう!(YoutubeをMP4でダウンロードするもっと簡単なブックマークレット)

YoutubeをMP4の高画質で見れる方法がある事が分かり、Google Operating SystemではすでにMP4形式でダウンロードできるブックマークレットが紹介されています。 One way …

スポンサードリンク

スポンサードリンク