カレンダー

11 | 2016/12 | 01
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

広告



最近の記事

カテゴリー

DATE: CATEGORY:TECH


タイトルのとおり、Twitterでつぶやいた内容を
勝手にFC2ブログに投稿するツールを作ってみた。

実際には、Webサービスにこんなのがあります。
TwiterToEtc[ちゅくる?SUGA PICS HTML_t2e?]
FC2だけじゃなく、いろんなブログにも対応しています。

・・・が、自分のID/Passを見ず知らずの人に預けることに
抵抗があったので、今回は自分で作ってみました。。。

とりあえず、両方ともAPIが用意されてるので、
そんなに小難しい話ではないです。

は~、、、
他にやらないといけないことがあると、なぜか
関係ない事をしてしまう、悪い癖だ。。。(^^;

とりあえず、やったことの概要を説明してみる。

前提


Sure sign of Spring - Robin - Bird
Photo:Sure sign of Spring - Robin - Bird By blmiers2

PHPで作りました。自分用なのでWebベースでなく、
Linux上でcronで動かして定期的に稼働させる用につくってます。
Webベースじゃないので、立ち上げっぱなしのPCが必要なのが、
残念、って感じかなぁ、、、

1.
Twitterでつぶやいた内容を、Twitterのapiを使って
ごそっと記事をとってくる。(その際、多少好みで編集)

【ご参考】
Twitter API Documentation(本家ドキュメント:英語)
Twitter API 仕様書 (勝手に日本語訳シリーズ)

2.
ごそっとTwitterからとってきた記事を、
FC2のapiを使ってごそっと投稿する。
# ちなみに、この作業するまで、FC2に
# xml-rpcのapiがあるなんて知りませんでした(^^;

【ご参考】
アタマノオト PHPからFC2ブログに投稿[XML-RPC,PHP]
XML-RPC - PHPプロ!マニュアル
PEAR : Package Information: XML_RPC

正直、参考URLに記載されてるソースをほとんどそのまま
流用すれば、そんなに大変じゃないと思います。

というわけで、参考までに流用&一部修正した
ソースだけ下記にのっけときます。

# プログラマではないので、ソースは多々、不備があるかと思いますが、
# こうしたほうがいい、的な内容がありましたら、”優しく”ご指摘ください(^^

とりあえす、全体像。main

<?php

/*** 設定パラメータ ***/

// TwitterのID/Pass
$twit_uid = "必要な情報を入力";
$twit_password = "必要な情報を入力";
// FC2 BlogのID/Pass
$fc2_uid="必要な情報を入力";
$fc2_password="必要な情報を入力";

/*** Twitterからの記事取得 ***/

// 最新記事のID(latest_id)を保存するファイル
$latestfile="./latest_id";
// 最新記事のID(>=1) を取得
$fp = fopen($latestfile,'r');
$latest_id = ereg_replace("\r|\n","",fgets($fp,1024));
fclose($fp);
// Twitterの日記リストを取得
$usertimeline = get_usertimeline($twit_uid, $twit_password, $latest_id);
if($usertimeline[result]){
print ("最新データが".$usertimeline[result]."件ありました。\n");
print ("最新記事のID:".$usertimeline[latest_id]."\n");
// 最新投稿のIDを保存
system("echo $usertimeline[latest_id] > $latestfile");
// 取得したデータを標準出力
print "===投稿記事一覧===\n";
print $usertimeline[data];
print "===リプライ記事一覧===\n";
print $usertimeline[reply];
}else{
print ("最新データはありません。\n") ;
}

/*** FC2への記事投稿 ***/

if($usertimeline[result]){
// 取得した日記データをFC2へ投稿
print ("FC2blogへの投稿中です。。。\n") ;
$title = mb_convert_encoding("Twitter からの投稿です。",'UTF-8','EUC-JP');
$article0 = mb_convert_encoding("Twitter 履歴<br /><br />",'UTF-8','EUC-JP');
$article1 = mb_convert_encoding($usertimeline[data],'UTF-8','EUC-JP');
// 取得した日記データをFC2へ投稿
add_article_tofc2($fc2_uid, $fc2_password, $title, $article0, $article1);
print ("FC2blog投稿が完了しました。\n") ;
}else{
print ("最新データがなかったので、FC2blogへの接続はキャンセルしました。。\n") ;
}


Twitter からのデータ取得 function

function get_usertimeline($username, $password, $latest_id){

// xmlデータ取得用ベースURL
$requesturl = "http://twitter.com/statuses/user_timeline.xml";
// since_id(このID以降の記事を取得出来る)
$since_id = $latest_id;
// リクエストURL
$requesturl = $requesturl."?since_id=".$since_id;
print "Request URL[".$requesturl."]\n";

// Basic認証用
//接続オプション
$option = array(
"http"=>array(
"method"=>"GET",
"header"=>"Authorization: Basic ". base64_encode($username. ":". $password)
)
);

// コンテキストの生成
$context = stream_context_create($option);
// 結果データの取得
$result = file_get_contents($requesturl, false, $context);
// 結果のxmlファイルをパースし、オブジェクト取得
$res_xml = simplexml_load_string($result) or die("XMLパースエラー");

$twitter[result]=count($res_xml->status);
$twitter[latest_id]=$latest_id;
$twitter[data]="";
$twitter[reply]="";

if($twitter[result]){
foreach($res_xml->status as $value){
// リプライ投稿は除く
if(!mb_convert_encoding($value->in_reply_to_screen_name,'EUC-JP','UTF-8')){

$twitter[data] = $twitter[data]."--------------------<br />\n";
$twitter[data] = $twitter[data]."投稿日時[".mb_convert_encoding(date("Y/m/d",strtotime($value->created_at)), 'EUC-JP', 'UTF-8')."]<br />";

// 最新記事のidを取得
$latest_id = mb_convert_encoding($value->id, 'EUC-JP', 'UTF-8');
if($latest_id > $twitter[latest_id]){
$twitter[latest_id] = $latest_id;
}

$twitter[data] = $twitter[data]."<br />\n".mb_convert_encoding($value->text, 'EUC-JP', 'UTF-8')."<br />\n<br />\n";
}else{
// リプライ投稿はreplyとして返す
$twitter[reply] = $twitter[reply]."--------------------\n";
$twitter[reply] = $twitter[reply]."投稿日時[".mb_convert_encoding(date("Y/m/d H:i",strtotime($value->created_at)), 'EUC-JP', 'UTF-8')."]";
$twitter[reply] = $twitter[reply]."(id:".mb_convert_encoding($value->id, 'EUC-JP', 'UTF-8').")\n";
$twitter[reply] = $twitter[reply]."\n".mb_convert_encoding($value->text, 'EUC-JP', 'UTF-8')."\n\n";
}
}
}
return $twitter;
}


FC2ブログへの投稿用 function

function add_article_tofc2($username, $password, $title, $article0, $article1){
require_once("XML/RPC.php"); //XML-RPC package 読み込み
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";

//------XML-RPCインタフェース、ユーザ定義
$mtHost = "http://blog.fc2.com"; //Movable Typeの設置サーバ
$mt_xmlrpc_path = "/xmlrpc.php"; //対象となるMovable TypeのRPCサーバ
$blogid = 0; //エントリーするブログID
$mtUser = $username; //書き込み可能なブログユーザー
$mtPassword = $password; //パスワード

//----------XML-RPCクライアントの作成
$c = new XML_RPC_client( $mt_xmlrpc_path, $mtHost, 80 );
$blogid = new XML_RPC_Value( $blogid, 'string' );
$username = new XML_RPC_Value( $mtUser, 'string' );
$passwd = new XML_RPC_Value( $mtPassword, 'string' );

//----------エントリーの書き込み
$thistitle = $title;
$topdescription = $article0;
$date=date("Ymd\TH:i:s");
$description = $article1;
$content = new XML_RPC_Value(
array(
"title" => new XML_RPC_Value($thistitle, 'string'),//エントリーのタイトル
"description" => new XML_RPC_Value($topdescription, 'string'),//エントリーの記事(前半)
"dateCreated" => new XML_RPC_Value($date, 'dateTime.iso8601'),//エントリーの日付
"mt_text_more" => new XML_RPC_Value($description,'string')//エントリーの記事(後半)
),"struct");
$publish = new XML_RPC_Value(1, 'boolean');
$message = new XML_RPC_Message('metaWeblog.newPost',array($blogid, $username, $passwd, $content, $publish));
$result = sendMessage($c, $message);
$blogs = XML_RPC_decode( $result->value() );
//----------記事IDのセット
$postid = new XML_RPC_Value( $blogs, 'string' );
//----------該当の記事IDを再構築
if ($mt_publish) {
$message = new XML_RPC_Message('mt.publishPost',array($postid, $username, $passwd));
$result = sendMessage($c, $message);
}
}

function sendMessage($c, $a){
$returnCode = $c->send($a);
if( !$returnCode ){
$err='Could not connect to the server.';
return $err;
}else if( $returnCode->faultCode() ){
$err='XML-RPC fault ('.$returnCode->faultCode().'): ' .$returnCode->faultString();
return $err;
}
return $returnCode;
}

?>


必要な情報を設定して、実行すれば、あとは勝手に
更新のあった記事をとってきてFC2に投稿してくれます。

(※その他、諸注意)
twitterのapiへのアクセスは、60分間に70リクエストと制限されています。
FC2へのxml-rpcを使った投稿は1日10件と制限されています。

とりあえず、twitterからはシンプルにデータを取ってきているので、
取り方を修正すれば、もう少しいい感じに投稿出来るかと。

このまま流用したときのサンプルはこちら。
Twitter からの投稿です。:なんとなしの日記

ではでは。

関連記事


TwitterのつぶやきをFC2ブログに勝手に投稿するようにしてみた
【続】TwitterのつぶやきをFC2ブログに勝手に投稿するようにしてみた。
TwitterのつぶやきをFC2ブログに勝手に投稿するようにしてみた(OAuth編)

Comment

コメントの投稿

管理者にだけ表示を許可する


トラックバック


この記事にトラックバックする


[ちゅくる][Twitter]TwitterToEtcな感じのソースコード


TwiterToEtc&#91;ちゅくる?SUGA PICS HTML_t2e?&#93;と かなり近いコードを出しているブログがありますので紹介します こちらです TwitterのつぶやきをFC2ブログに勝手に投稿するようにしてみた。:なんとなしの日記 TwitterToEtcとの差 うちはcronが使えないので、画像の



copyright © なんとなしの日記 all rights reserved.
内職☆在宅ワークの最強は?アフィリエイト!. 初心者だってカッコ良いホームページ作るぅ!
Powered by FC2ブログ
Related Posts Plugin for WordPress, Blogger...