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

A Day In The Boy's Life

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

Draft of List API documentation Options @ Twitter API Announcements


これ、草案らしいですけど一通りTwitterのリスト機能を操作するための仕様が書かれていたので、試しに使ってみました。

ここで書いたAPIは正しく機能したんですが、なんせ草案とのことなので今後仕様が変わるかもしれませんね・・・。


ベースにしているのは、以前に書いた下記の2つの記事のプログラムで、PEARのHTTP/Client.phpを使っています。


Twitterのタイムラインを取得するPHPスクリプト


Twitterへ投稿するPHPスクリプト



自分が作成したリストを取得


まずは、自分が作成しているリストを取得してみます。

リストは、publicなものもprivateなものも両方取得できます。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";
// 自分のリスト一覧を取得
$page = "it_boy/lists.xml";

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

$client = new HTTP_Client(null, $basic);
$client->get("http://twitter.com/".$page );

// レスポンスを取得
$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");

$xml = new SimpleXMLElement($body);

// リスト名とそのフルネーム、リストのモード(public or private)と登録メンバー数を表示
for ($i = 0; $i < count($xml->lists->list); $i++) {
    echo "name / full_name: " .$xml->lists->list[$i]->name . " / " . $xml->lists->list[$i]->full_name . "\n";
    echo "mode / member: " . $xml->lists->list[$i]->mode . " / " . $xml->lists->list[$i]->member_count . "\n";
}

?>


実行結果は、こんな感じに現在作成している2つのリストが取得できます。


$ php twitter_mylist.php
name / full_name: favorite_user / @it_boy/favorite-user
mode / member: private / 1
name / full_name: engineer / @it_boy/engineer
mode / member: public / 6


自分が登録されているリストを取得


次は、結構気になる(?)自分が登録されているリスト一覧を取得するスクリプトです。

実行結果は、さっきと同様に出るので割愛。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";

// 自分が追加されているリスト一覧
$page = "it_boy/lists/memberships.xml";

$client = new HTTP_Client(null, $basic);
$client->get("http://twitter.com/".$page );

// レスポンスを取得
$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");

$xml = new SimpleXMLElement($body);

// リスト名とそのフルネーム、リストの登録メンバー数を表示
for ($i = 0; $i < count($xml->lists->list); $i++) {
    echo "name / full_name: " .$xml->lists->list[$i]->name . " / " . $xml->lists->list[$i]->full_name . "\n";
    echo "member: " . $xml->lists->list[$i]->member_count . "\n";
}

?>


該当のリストに登録されているメンバーのつぶやきを取得する


お次はリストのメイン機能になる、リストに登録した人のつぶやきを取得するスクリプトです。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";

// そのリストに登録している人のつぶやきを見る
$page = "it_boy/lists/engineer/statuses.xml";

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

$client = new HTTP_Client(null, $basic);
$client->get("http://twitter.com/".$page );

// レスポンスを取得
$response = $client->currentResponse();
$body = mb_convert_encoding($response['body'], "EUC-JP","auto");

$xml = new SimpleXMLElement($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スクリプト 」と全く同じイメージで出力されます。



リストを作成する


お次は、新しくリストを作ってみます。

今までとはちょっと作りが違ってきます。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";

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

// リスト名とモード(public or private)を配列にセット
$data = array("name" => "hoge_list", "mode" => "public");

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

$client = new HTTP_Client(null, $basic);
$client->post($url, $data);

$response = $client->currentResponse();

?>


これで、実行してみたら、上記の場合は「hoge_list」がpublicモードで作成されます。



リストにメンバーを加える


リストの作成が終ったら、メンバーを登録しなくては意味がありません。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";

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

// 登録するユーザーのIDをセット
$data = array("id" => "12345678");

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

$client = new HTTP_Client(null, $basic);
$client->post($url, $data);

$response = $client->currentResponse();

?>


登録するに当たっては、ユーザー名ではなくユーザーIDを指定します。

なので、別の手段でユーザーIDを事前に取得しておかなくてはなりません。

その人の発言内容を取得したら、その中にユーザーIDは必ず含まれているのでそこから取得してセットすればよいかもしれません。



リストからメンバーを削除する


最後は、リストに追加したメンバーを残念ながら削除する場合です。


<?php

require_once "HTTP/Client.php";

$username = "it_boy";
$password = "hogehoge";

// パラメータに削除するユーザーIDを付与しておく
$url  = "http://twitter.com/it_boy/engineer/members.xml?id=12345678";

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

$client = new HTTP_Client(null, $basic);
$client->delete($url);

$response = $client->currentResponse();

?>


削除の場合も、ユーザーIDを指定する必要があります。

また、削除の場合だけDELTEメソッドを発行して削除を行います。



主機能の使い方は書いてみましたが、最初に書いたAPIの草案の中には、ここに書いた以外のAPIも書かれているので試してみてはどうでしょうか。


最後に、よろしければ@it_boy をよろしくお願いします。





自分もそうなので自戒の意味も込めて書く。


同じ会社に長年働いているといろんなことがわかってきます。

そして、そのわかったことから色んな弊害が生まれるんだなとも感じます。

付き合いも多くなるので顔を覚えている人も増えて利害関係を考えるようになり、担当する仕事も長年の経験から大体のことはそつなくこなしてしまい、会社の雰囲気に慣れてしまい緊張感がなくなったことから動じなくもなったり。



勘違いを生む感情


勘違いを生むその感情は、先に書いた「わかった」感覚が生み出すものだと思います。

いろんな人と付き合って利害関係がわかる中で、その人と付き合うメリットを感じ取って自分を優位に立たせようとしたり、長年会社にいる中で自分の経験と会社の歴史が重なってくることにより、その経験が貴重なものと重宝されてきたりします。


会社の歴史を知るものというのは結構ちやほやされるもので、何で今の業務がこうなったのかということに対して、「それはこういう経緯があったからだよ」というと新参者から妙に納得されたり、それを知らない人にとっては、その知らない隙間を生める知識を持っている人というのは貴重に感じたりするわけです。

そういう長年の経験が逆に勘違いを助長させるのかなと。


もう一つは、その業務をよく知っているから、何が起きても大抵のことは対応できたりします。

例えばとあるシステムの保守担当を長年務めていると、誰よりもそのシステムのことがわかるようになってきます。

そのコードは誰よりも読んだことがあるのであれば、それを改修する際でも影響範囲がすぐにわかったり、問題点や対応にどれだけのコストがかかりそうかももすぐに頭をよぎります。

ただ、それは誰よりもスキルがあるというわけではなく、単にその業務に慣れ親しみ、とっさにやるべきことがわかっているだけに過ぎません。



勘違いの弊害


こうして勘違いすることにより様々な弊害が生み出されていきます。

まず世界観を見失うことにより、自分が生きていける範囲をぐっと狭くします

自分が優秀だと感じているのは、まさにその場所だけであって、外部の市場価値を気にしなくなります。

(または目をつぶっているだけか)


次に、目標を見失うことこともあるでしょう。

変に業務をそつなくこなしてしまうと、それをより成長させるための手段を講じなくなります。

先に書いたシステムの保守を無難にこなせるようになったのは、そのシステムをよく理解しているだけの話であって、その保守の方法や技術的なレベルというものとは全く関係性がありません。

現在のスキルで十分にできるのは、そのスキル以上のものを必要としないからであって、そういう環境ではそれ以外の要素を取り込もうという考えもなくなってしまいます


次に、スタンダードを見失う可能性があります。

今やっている仕事の仕方というものが最も良い方法であり、他もそうやっているのだろうという勘違いです。

もちろんそれぞれ仕事の仕方というのは、その会社の特性や文化に左右されたりするところもありますが、それを調べることさえもしなくなるでしょう。

今やっていることがイコールベストな方法だということを信じてしまいます


次に、緊張感がなくなることにより、対応が十分でなくなる可能性もあります。

周りは知った仲ばかりになれば、多少の問題があっても許されるという雰囲気にもなってしまいます。

そうすることで、十分な検証やリスクの管理というものをせずに業務をしてしまうことが当たり前のことという風になってしまいます。


最後に、変化することを嫌う習慣ができます。

今の環境が心地よいものであればあるほど、変わることによってその環境が失われることを恐れて避ける行動に出るでしょう。

長年、そこで自分が積み上げてきたものが通用しなくなる可能性があるわけです。

今の自分があるのは、その経験が積み重なった結果であって、その苦労を台無しにされるのは勘弁してくれ、または居場所が無くなる警戒心が出てくるのでしょう。



まとめ


その勘違いをなくす方法は、他の人との付き合いを増やしてみることになるかと思います。

転職するのも良いでしょうし、別の場所で同業者と会って話してみるのも良いでしょうし、ネットでいろんな人のブログを読んで自分との考えの乖離を確かめてみるのも良いかもしれません。


他の場所での自分の価値というものが如何ほどであるのかということを確認する必要があるのかなと。

もしかしたら、勘違いだけでなく本当に優秀だったという場合もあるでしょう。

しかし、社内では当たり前と思って自分の価値を不当に低く扱われているのかもしれません。


要は、今の環境というものイコール世の中のスタンダードだということを勘違いしないための対策を打っておかないと本当に勘違いしてしまう人間になってしまうんだろうな、とそう思うわけです。




まぁ、どの会社にもいると思うのですが、一日中ネットサーフィンしてたりお喋りしてたりする人っていたりしますよね。

こっちはまじめに仕事しているのに勘弁してくれ、って気持ちになったりもしますが見方を変えればこういう人たちって意外と優秀なのかも、と思う部分も。



サボることが優秀だと思う理由


まず、何が優秀かってやることを自分で見つける能力があるってこと。

一日の長い時間の中、そして会社という縛られた環境の中でその時間をつぶすことを見つけています。

仕事を与えられることって凄く楽なことなんだと感じるときがあります

それをやっていれば文句言われませんし、時間も勝手に過ぎていきます。

その与えられたことを言い訳にできますし、労働という充実感を与えてくれたりもします。


サボるということは、周りの目を気にしない図太さも必要になってきますし、一日をつぶすための何かを見つけないといけませんし、仕事ではないほかのところから充実感を得なくてはなりません

これって結構しんどいことなのでは、と思うわけです。


ネットしてりゃ一日つぶれるよ、っていうのもありますけど、一日中ネットで時間をつぶせるほど巡回するサイトがあるのかって思いますし、それだけの情報量をよく集められるな、とも思ったりします。

そして、こういう人って(受け売りが多いですけど)、結構物知りの人が多かったりもします。

(まぁ、色んなサイト見てたりするでしょうからねぇ・・・)


あと、行動力があるということ。

全身全霊でサボっている人は、そのための労力というものを惜しまなかったりします。

興味があるところに赴いては時間を潰そうとします。

これもある意味「好きを貫く」ということかもしれません。

遊ぶといえど、意外とその一線を越えるエネルギーって馬鹿にならないところがあります。

面倒だと思って何もしなかったり。


まぁ、そういう人は多分はまるところにはまれば高い能力を発揮するのでは、と思ったりするわけです。



要はどうサボるかということが大事なのかも


エンジニアといえども一日中、プログラミングしてたら飽きも来るときがありますし、潰せないバグでイライラすることもあります。

そういうときにネット見たりして情報収集したりって人は多いかもしれませんが、会社から見れば業務と関係ないことは全部サボりだ!見たいな事を言ったりもするわけです。

ですが、そのサボった時間でえた知識が役立つこともあるわけですし、モチベーションにつながることもある。


今の仕事では全く使わないけど、こういう技術って面白そうだな、と興味を持つことはあったりします。

その情報を集めることもサボりの一環になるのでしょうけど、その技術をいざ試そうということになると、結構なエネルギーがいったりもします。

検証したり、不足したりする情報を集めたり、他のものと比較したり。

そういった労力を惜しまずに突き抜けてサボりとおせるのであれば、それも一つのその人の能力を表しているのではないかと思います。


これは自ら興味を開拓し、モチベーションを他から補い、それを周りに還元することでより良い環境を作ったりもするわけです。

サボり方によって随分と結果も違ってくるのかなと。


Googleの20%ルールではないですが、時間を見つけて上手くサボりそれによって得られるものがあるのであれば、サボること自体、悪いことではないと感じます。

そして、その上手くサボれる人って言うのもまた優秀なのではないでしょうか。