A Day In The Boy's Life -101ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

2010.10.11 追記

下記のプログラムはTwitterのBasic認証を利用するプログラムで10年8月以降動作しません。

Twitterで登録したお気に入りを登録したい場合、もっと簡単に「Tumblrへ簡単にTwitterのお気に入りを取り込む 」の方法で対応ができます。

プログラムを書きたい場合は、エントリ最後に記載している関連記事の中のOAuth対応スクリプトを応用することで書くことができると思います。



Twitterのタイムラインで気に入ったツイートを見つけた場合、Twitterのお気に入りへ登録するようにしているんですが、このお気に入りを後で見返すのは結構面倒だったり、見づらかったりします。

個人的には、Tumblrはある一文を引用して保存しておきたいって時に便利なので、TwitterとTumblrって結構相性が良いのではと思ったりしてます。

と言うことで、Twitterで付けたお気に入りをTumblrへ投稿するプログラムを書いてみました。



Twitterのお気に入りを取得するPHPスクリプト


まとめてソースを解説すると長くなるので、まずはTwitterのお気に入りを取得するAPIを利用したプログラムの書き方から。

PEARのHTTP_Clientを使っています。


<?php

require_once "HTTP/Client.php";

$username = "your-twitterid";
$password = "your-password";

// TwitterAPI用のURL
$url  = "http://twitter.com/favorites.xml";

$basic = array('Authorization'=>'Basic '.base64_encode($username.':'.$password));

$client = new HTTP_Client(null, $basic);

// お気に入り取得のためのリクエスト送信
$client->get($url);
// お気に入りのレスポンス取得
$response = $client->currentResponse();

// お気に入りのXML情報を解析
if (isset($response['body'])) {
    $xml = new SimpleXMLElement($response['body']);

    for ($i = 0; $i < count($xml->status); $i++) {
        echo $xml->status[$i]->user->screen_name . " : " . date('Y/m/d H:i:s', strtotime($xml->status[$i]->created_at)) . "\n";
        echo "\t" . $xml->status[$i]->text . "\n";
    }
}


この辺の書き方は、「Twitterのタイムラインを取得するPHPスクリプト 」とほぼ同様になるので、そちらも合わせて参考にしてみてください。

基本的には、Basic認証をクリアさせてTwitterのお気に入り用のURLから情報を取得、返ってきたデータ(上記の場合はXML形式)を解析して表示、ってな感じです。



Tumblrへ投稿(QUOTE)するPHPスクリプト


次に、TumlbrへQUOTEを投稿するPHPスクリプトです。

Tumblrへ写真やブログ記事を投稿したい場合は、別の書き方が必要です。


参考: Tumblr APIの使い方を勝手に和訳したもの @ Coro-1729


<?php

require_once "HTTP/Client.php";

// Tumblrの書き込み用APIのURL
$url  = "http://www.tumblr.com/api/write";

// 引用する内容
$quote = "test";
// 引用元
$source = "http://ameblo.jp/itboy/";

$client = new HTTP_Client(null);

// Tumblrへ投稿するために必要なパラメータ
$request = array('email'    => 'your-Email',
                 'password' => 'your-password',
                 'type'     => 'quote',
                 'quote'    => $quote,
                 'source'   => $source);

// リクエスト送信(Tumblrへ投稿)
$client->post($url, $request);

// Tumblrからのレスポンスを取得
$response = $client->currentResponse();

// HTTPステータスコードの内容からエラーハンドリング
if ($response['code'] == 201) {
    echo "投稿完了";
} elseif ($response['code'] == 403) {
    echo "E-Mailまたはパスワードが違います";
} else {
    echo "リクエストが不正です";
}


こちらも、投稿するURLとリクエストのパラメータが異なるぐらいで、Twitterのプログラムとあまり大差なく書くことが出来ます。

Tumblrの場合は、認証用のパラメータ(E-Mailとパスワード)を同時に渡します。



Twitterのお気に入りを取得してTumblrへ投稿するPHPスクリプト


以上のロジックを踏まえて、実際にTwitterのお気に入りをTumblrへ投稿するスクリプトを書いてみます。

(そして完成したものがこちらに・・・)


<?php

require_once "HTTP/Client.php";

// 最後にTumblrへ投稿したIDを保存しておくファイル
$twitter_id_file = './twitter_last_favorite_id.txt';

$last_id = NULL;

// 前回Tumblrに投稿していた場合は、そのIDを取得
if (file_exists($twitter_id_file)) {
    $last_id = trim(file_get_contents($twitter_id_file));
}

$tumblr_post = array();
$num = 0;

while (1) {
// Twitterからお気に入りを取得
    $favs = getTwitterFavorites();
    if ($favs === FALSE) {
        break;
    } else {
        for ($i = 0; $i < count($favs); $i++) {
// 前回投稿したIDと同一だった場合はお気に入りの取得を終了
            if ($last_id !== NULL && $favs[$i]->id == $last_id) {
                break 2;
            } else {
// Tumblrのquoteに入れるテキスト
                  $tumblr_post[$num]['quote']      = $favs[$i]->text;
// Tumblrのsourceに入れるテキスト(Twitter / @(username) : (post-date)の形式)
                $tumblr_post[$num]['source']     = "<a href='http://twitter.com/" . $favs[$i]->user->screen_name . "/status/" . $favs[$i]->id . "'>";
                $tumblr_post[$num]['twitter_id'] = $favs[$i]->id;
                $num++;
            }
        }

// 最初の実行の場合は20件だけTumblrに登録する仕様
        if ($last_id === NULL) {
            break;
       }
    }
}

$post_flg = TRUE;

// Tumblrへ投稿していく
for ($i = 0; $i < count($tumblr_post); $i++) {
    if (postTumblr($tumblr_post[$i]) === FALSE) {
        echo "登録失敗\n";
        $post_flg = FALSE;
        break;
    }
}

// Tumblrへの投稿が失敗した場合は、直前のTwitterのIDをセット
if ($post_flg === FALSE) {
    if ($i !== 0) {
        $last_id = $tumblr_post[$i-1]['twitter_id'];
    }
} else {
// 全て正常に登録できた場合は、最新のTwitterのIDをセット
    $last_id = $tumblr_post[0]['twitter_id'];
}

// 最後のお気に入りのIDを保存
$fp = fopen($twitter_id_file, "w");
fwrite($fp, trim($last_id));
fclose($fp);


// Twitterからお気に入りを取得する
function getTwitterFavorites() {

    static $page = 1;

    $twitter_uname = "your-twitterid";
    $twitter_pwd   = "your-password";

// Twitterのお気に入り取得API用のURL
    $twitter_url  = "http://twitter.com/favorites.xml?page=" . $page;

    $basic = array('Authorization'=>'Basic '.base64_encode($twitter_uname.':'.$twitter_pwd));

    $client = new HTTP_Client(null, $basic);
    $client->get($twitter_url);
    $response = $client->currentResponse();

    if (isset($response['body'])) {
// 取得したTwitterにつけたお気に入りを解析
        $xml = new SimpleXMLElement($response['body']);
        $page++;
        $data = $xml->status;
        if (!isset($xml->status[0]->id)) {
            $data = FALSE;
        }
    } else {
        $data = FALSE;
    }

    return $data;
}

// Tumblrへ投稿する
function postTumblr($data) {

    $tumblr_email = "your-Email";
    $tumblr_pwd   = "your-password";

// Tumblrの書き込み用APIのURL
    $tumblr_url  = "http://www.tumblr.com/api/write";

    $client = new HTTP_Client(null);

    $request = array('email'    => $tumblr_email,
                     'password' => $tumblr_pwd,
                     'type'     => 'quote',
                     'quote'    => $data['quote'],
                     'source'   => $data['source']);

    $client->post($tumblr_url, $request);

    $response = $client->currentResponse();

    if ($response['code'] == 201) {
        $status = TRUE;
    } else {
        var_dump($response);
        $status = FALSE;
    }

    return $status;
}


細かいエラーチェックや例外処理は組み込んでいませんが、一通り動くと思います。

前回実行した際の最後のTwitterのエントリIDをファイルに保存しているので、次回実行時はその続きからTumblrへ投稿できます。

ただ、エントリIDを保存したファイルが無い場合は直近の20件だけ取り出してTumblrへ投稿する仕様にしてます。(過度にAPI消費や負荷をかけないようにするため)

cronに登録しておけば定期的に拾ってTumblrへ投稿してくれると思います。


出来た結果は、私のTumblr の方で確認を・・・。






ネットでもリアルでも人間関係が気まずくなることは良くあることです。

そして、壊れた人間関係を元に戻すややこしさとめんどくささもまた同様。

しかし、ネットではそのシステムの仕組み上、付き合いを開始するのも簡単であれば、その逆の人間関係を切ることさえも、あまりに簡単に出来たりします。



ネットで付き合う仕組み、分かれる仕組み


リアルでの人間関係の始まりは、まさにその人と会うところから始まります。

会社ではメールや電話だけでやり取りしていて、名前は知ってるけど会った事が無い、ってケースもあったりはしますが、付き合いが深くなるには実際にあって名刺交換などをするところから深くなっていくことが多いでしょう。


一方でリアルで人間関係が悪くなると、かなり面倒なことにもなったりします。

自分とその人だけの関係であり、他に誰も巻き込まないのであれば、互いに連絡を取らないということだけで済むかもしれません。

が、多くは関係者がいてその板ばさみになったり、どっちの味方だ的に1人の人間関係を切るために、他の人とも合わせて疎遠になるケースもあります。


ネットでの付き合いは逆に非常に単純なもので、何らかの簡単な信号を送るだけで済みます。

Twitterの場合はフォローしたり、mixiの場合はマイミクの申請をしたり、あるいはそんな手続きも要らずにいきなりメッセージを送ると言うことでも開始されるでしょう。

それは人間関係の開始とはいわないかもしれませんが、ネット上では非常に簡単な方法でコミュニケーションを始めることが出来ることは確かです。

リアルでは、いきなり知らない人から声かけられるとかなり警戒されたりもしますが、ネットではその敷居がかなり低くなっています。


では、ネットで付き合いを止める場合はどうするかというと、これもまた非常に簡単な方法で分かれることができます。

Twitterではリムーブやブロックと言う形でシステムに実装されていますし、あるいは全ての人間関係を止めたければそのアカウントを削除したり、サービスから退会することで可能になります。

そして、多くは他の誰かに迷惑をかけると言うことも無かったりします。

当人同士のいざこざはあまり周りに響きませんし、リアルほどその面倒で無意味ないざこざに巻き込まれると言うことも少ないでしょう。


ネットでの付き合いの終焉は、その単純なシステムにより突然訪れるわけです。



ネットでの人間関係の修復は可能なのか


ネット上の付き合いと別れが非常にシンプルなのは、リアルでの付き合いのようなわずらわしさがないと言う面では優れている面もある一方、非常に残酷なシステムでもあると思うわけです。

何か気まずい関係になれば一方的にその関係を終らせることが出来ます。

リアルであれば、迷惑をかけつつも周りの取り持ちによってその修復を図ることも出来るかもしれませんが、ネットではそれがかなり難しいように思えます。


その理由は、ネット上の関係自体はリアルほど重く結びついていないと言うのがあると思います。

それは、システムの構造上、開始と終わりがシンプルになっているところがそういった印象を与えるのかもしません。

もちろん、ネット上の関係がリアルに結びつくこともよくあります。

この場合は、リアルの関係と同様に考えればいいわけですが、ネット上だけの関係の場合はそうもうまくいかなかったりします。


ネットではその簡単に関係に終止符を終らせる仕組みゆえに、その後の修復を行うことはかなり難儀します。

そもそも連絡さえ取ることが出来なくなったりするわけですから。

そして、リアルであるような修復にいたる過程は、その関係を壊すことで自分や周りにもたらす不利益や、同じ職場や友人など普段から付き合いがある故に印象が強く、それを修復しようと頭をよぎるかもしれませんが、ネットの場合はそのめんどくささを超えてまで修復しようと言うメリットがあまり浮かばないかもしれません。


ネットでの人間関係の崩壊は、そのシンプルな所作によって永遠のものとなることが多いと思うわけです。



新しい人間関係


ネット上で行われるような単純な付き合いと単純な永遠の別れと言うのは、新しい人間関係なのかもしれません。

人付き合いなんて、一生のうちでそう多くの人と出来るものではありませんし、そのシーンごとに必要な人と強くかかわっていくことの方が多くのメリットを受けられるでしょう。

そして、その付き合いと終わりはきわめてシンプルに行えます。


何も付き合いの終わりの全てが喧嘩別れになるわけではないでしょう。

ただ、単に自分の人間関係として許容できる範囲のキャパシティに他の人が入ってきたから追い出されてしまった、と言うことかもしれません。

されるのは悲しいものですが、する側に立つとそのシステムは非常に楽なものだったりもします。


ネットでの人間関係に比重が置かれないと言うわけではないでしょうけど、ネットの中では多くの出会いと別れがあります。

その向こう側に誰かが存在すると言うことは確かなんでしょうけど、それがどこの誰かは多くの場合わかりません。

例えそれが著名人であったとしても、ネットでの付き合いはそのシンプルさで始まり、そのシンプルさで終るのでしょう。


ネットでの人間関係ってそんなに希薄なものなんだっけ?と思う一方で、こういう人間関係が今後の主流になっていくのかな、とも思うわけです。

もちろん、人と人は何時どこでまた再開するかわからないものです。

立つ鳥跡を濁さない方が賢明なんでしょうけど。




世間では、ブログやWiki、Twitterなどなど数多くの情報を発信・共有するツールと言うものが登場してきているのに、社内では相も変わらずメールやファイル共有フォルダなどによって情報が管理されていたりします。

3年ほど前にエンタープライズ2.0なんて言葉が流行って(そして、そのままバズワードで終りましたけど)、これからの社内の情報共有のあり方なんてのも変わるのかな、と思いましたがそうはなっていません。



情報共有のあり方を変える理由


まず、何で情報共有の方法を変える必要があるか考えてみると、一つはそれによって仕事のやり方が固定化されてしまっているところがあるというのがあるかなと思います。

メールやファイル共有フォルダによって仕事を進めていくやり方は、10年以上前から定着してIT化が進んでもその根本は全く変わっていません。

これがベストな方法であればいいものの、社内と社外を見比べてみるととてもそうは思えなかったりもします。


ツールに頼るなどして改善を試みようとしますが、根本的に今までのやり方を捨てることが出来ず、あまり上手くことが進むと言うことが無かったりします。

情報共有が進まないと嘆いてはいるものの今のスタイルを引きずろうとするためにたいした効果を生み出さないということがよくあったり。



社内の共有スタイル ≠ 社外の共有スタイルという意識


情報共有の方法が変わらない理由の一つは、外の環境でのやり方はうちのやり方には適さない、またはそんなやり方で上手くいくはずもないと言う、固定化念を持っている人が多かったりもします。

社内では、投資対効果を強く求められ、海のものとも山のものともわからないようなものへの投資は避けられる傾向にあります。

定量的に測定できる高価ならよいものの、情報共有の方法などはどちらかと言うと定量的な効果の方が色濃く、なかなかそれを上手く説明することも出来ません。

ブログやWikiなどを社内に導入したところで、それを使ったことが無い人へは、果たしてそれによってどう変わるのかがなかなかわかってもらえません。


また、ネット上で盛んに行われている情報共有のスタイルは自ら情報を探すと言う行為であり、社内では誰かに聞けば教えてくれると言う俗人的な共有方法のみが横行している、という共有スタイルの違いも目立ちます。

ドキュメント化を進めても聞けば教えてくれると言う共有スタイルを捨てきれないがために、どんどんとマニュアルは廃れていき、やがて存在さえも忘れられたりします。


そして、業務効率化という名の元に即時性が強く求められることがあります。

なので、人と人とがつながったときに生まれる相乗効果というよりも、自分が楽に情報を引っ張り出せるのか、ってところだけに着目されると、それがひどく手間のかかるものだったり、相乗効果という目に見えない効果に懐疑的に見られてしまうかもしれません。



情報 = 資産の文化


社内の情報と言うのは俗人的になりやすい傾向にあります。

業務の担当が明確に分けられ、その担当者しかよくわからないと言う情報も数多くあります。

よく言えば分業化されているのでしょうけど、度が過ぎるとそれが自分の価値と見誤る危険もあります。


社内の情報と言うのは、外では流通していない情報が多くあります。

たとえ、流通している情報だとしても、それが自社カスタマイズされたものとなっており、いわゆる一般論というものが通らないこともケースもよくあります


こういうところが社外で情報を自ら探すと言う行為を妨げているの要因の一つだと感じたりします。

探せる情報が無いから誰かに聞くしかない、それも探すと言う行為の一つではあったりしますが、ひどく俗人化された情報に対する手段はその人に聞くと言う唯一のものしか選択肢が無かったりもします。


そしてそれを抱え込むことが自分の存在価値と見誤る原因にもなっていたりします。

社内で情報が発信されない理由は、その情報を広く知らしめることで自分の存在価値が下がると言うことを恐れている人が多いからかもしれません。



イントラネットはシステムを結び、インターネットは人を結ぶと言う不思議


ネットを見てると様々な仕事や地域に住んでいる人がいて、その人たちとつながることで新たな知識を得ることも出来ます。

が、社内では新たな知識を得るためには外部からの人材を登用すると言うことしか考えられてい無かったりします。

それは一部では正しいのかもしれませんが、十分に社内の情報や人を活用も出来ずにそこばかりに着目されているのではないでしょうか。


インターネット上で行われているような人と人との結び付きを社内では全く行わず、会議やたまたま仕事で絡むことになったなど、リアルでの付き合いのみに限定されていたりします。

それを知っている人というのが社内にはいるのに、少し調べてみていなかったから社内にはいないんだ、と言うような決め付けが普通に行われていたりするわけです。

誰が何の情報を持っているかと言う管理さえ、俗人化されていたり


社内のイントラネットも社員同士を結び付けているネットワークなわけです。

規模はインターネットほどではありませんが、社内で結び付けているのは単にシステムやIT機器のみになっていて人と人とを全然結び付けられていないのではないかと感じます。


ネットで無償の奉仕がされ情報がどんどんと発信されていくのは、人と人とが結びついたときの喜びをインセンティブと考えている人が多いからではないでしょうか。

これは、例え社内であっても同様なのではないかと思います。

変に俗人化され、その情報を守ることで頼られているという間違った感覚でインセンティブを得るのではなく、より多くの人に役立つものを情報発信していくことに喜びが感じられるのであれば、そのスタイルも変わっていくのではないかと思うわけです。