位置案内

  1. トップページ
  2. >このページ

Neeeeeews!!!

もくじ

これは何か

cli/haiku.php は、コマンドラインではてなハイクのコンテンツを閲覧、また書き込み、画像投稿等を行うことができる専用クライアントツールです。Twitter の読み書きにもことのついでに対応しています。YANMAH2 project の副産物であり実験的産品です。

必要環境

PHP 5.2 以降並びに PEAR の HTTP_Request2 及びこれらが依存する各モジュールと、bash などのコマンドラインシェル及びターミナルエミュレータ等の CLI 環境が必要です。

ライセンス

cli/haiku.php はフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された Affero GPL v3 の定める条件下で自由に利用、改変、再配布を行うことができます。このプログラムは有用であることを願って頒布されますが、全くの無保証です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも含め全く存在しません。

ダウンロード

YANMAH2 project のダウンロード(リリース一覧)のページから cli/haiku.php のパッケージをダウンロードしてください。

初期設定

最初の使用前に haiku.php をテキストエディタで開き、スクリプト冒頭の変数の値を編集してください。以下に設定例を示します。

//CONFIG ----------------------------
// /path/to/directory/filename of external config file.
//It makes it like being empty if it doesn't use it. 
$external_config_file = '/home/myname/.clihaikurc';

$external_config_file は外部設定ファイルへのパスを指定します。外部設定ファイルを使用しない場合は空のままにしておいてください。外部設定ファイルは次のような内容のファイルで、文字コードは UTF-8(BOM なし)にする必要があります。

<?php
$hatenaid = "hatenachan";
$postaddress = "hxat0enya1";
?>

外部設定ファイルは haiku.php 内部の設定区画が読み込まれた直後に読み込まれ、内部の設定値を上書きします。

//OAuthoroxy API
$oauthoroxy = 'http://pulpdust.org/oauthoroxy/index.php';

oauthoroxy の URL です。通常はそのままでかまいません。自身で設置した oauthoroxy を使う場合などは変更してください。

//Hatena ID
$hatenaid = "hatenachan";
//Post Address
$postaddress = "hxat0enya1";

$hatenaid にははてなID、$postaddress にはてなの投稿用アドレスの @ より前の部分を代入します。

//Hatena OAuth Access Token
$hatenakey = '8ha10te7/CHaNg==';
//Hatena OAuth Access Token Secret
$hatenasec = 'HAteNaHAikuhATEnAhaIKU=';

$hatenakey$hatenasec ははてなハイク API にアクセスするための Access Token 並びに Access Token Secret です。URL「{$oauthoroxy}?with=haiku」をウェブブラウザで開いて取得してください。$oauthoroxy が http://pulpdust.org/oauthoroxy/index.php の場合は、この URL は「http://pulpdust.org/oauthoroxy/index.php?with=haiku」になります。

//Twitter OAuth Access Token
$twitterkey = '1234567890-FwUa7yha8te10na7Ha8i1KU9';
//Twitter OAuth Access Token Secret
$twittersec = 'fWuAFeHhA8te10na7hA8I1ku9dUmyDuMY47mOn';

$twitterkey$twittersec は Twitter API にアクセスするためのパスキー(Access token / Access token secret)です。これは Twitter 関連の機能を使う場合に必要です。URL「{$oauthoroxy}?with=haiku」をウェブブラウザで開いて取得してください。$oauthoroxy が http://pulpdust.org/oauthoroxy/index.php の場合は、この URL は「http://pulpdust.org/oauthoroxy/index.php?with=twitter」になります。

//I/O characode (JIS|UTF-8|EUC-JP|SJIS)
$env_charcode = 'UTF-8';

$env_charcode は入出力の文字コード方式の指定です。お使いのシステムの環境に合わせて設定してください。

通常はここまでの設定を変更するだけで充分です。以下は必要に応じて確認・変更してください。

//NG Word(The PCRE regular expression can be used.)
$ng_regexp = '^RT';
//The entry including {$ng_str} is replaced with this character string.
$ng_subst = "楽しい仲間がぽぽぽぽ〜ん♪";	

$ng_regexp はいわゆる「NG ワード」です。これは Perl 互換正規表現として解釈され、これが含まれるエントリの本文全体を $ng_subst に置き換えます。上の例では、「RT」から始まるエントリを「楽しい仲間がぽぽぽぽ〜ん♪」に置き換えます。

//Post from
$source = "cli/haiku.php";

$source ははてなハイクの from 欄に入る文字列です。

// /path/to/directory/temporary_file_name
$temp_file = '';

$temp_file は cli/haiku.php が使う一時ファイルのファイル名を例えば /tmp/clihaiku.tmp のように指定します。これを空にした場合は、実行時のカレントディレクトリに一時ファイルが作成されます。

//Whether KEYWORD is converted into HASHTAG when cross-posting it or not?(yes|no|remove|brackets)
$keyword_conv_hashtag = 'yes';

$keyword_conv_hashtag は、クロスポスト時にはてなハイクのキーワード(投稿内容の"キーワード=本文"の左辺)を、Twitter 向けにはハッシュタグに変換するかどうかの選択です。

//Entry count of default.
$default_count = '20';

$default_count は、オプション count:nnn を指定しなかった場合に取得するデフォルトのエントリ数です。

//Horizontal line where header and text are partitioned.
$horizontal_ruler = '----------------------------------------------------------';

$horizontal_ruler はエントリのヘッダと本文を仕切る行に入る文字列です。

//Character string that will be inserted for single line mode instead of line feed code. 
$slmode_subst_linebreak = '::br::';

$slmode_subst_linebreak は、シングルラインモードのときに改行コードの代わりに挿入する文字列を指定します。

//Footer put up when posting to Haiku. 
$sign_haiku = '*cli*';
//Footer put up when posting to Twitter. 
$sign_twitter = $sign_haiku;
//Footer put up when cross-posting it. 
$sign_xpost = $sign_haiku;

$sign_haiku$sign_twitter$sign_xpost はそれぞれ、ハイクへの投稿、Twitter への投稿、クロスポストの際に、本文の末尾に自動的に挿入する署名を指定します。これらが空である場合には、何も挿入されません。

//If 140 characters are exceeded when posting to Twitter, do you stop it?(yes|no)
$check_140_chars = 'yes';

$check_140_chars は Twitter への投稿時に、投稿内容が141文字以上だったら投稿を中止するかどうかを指定します。yes ならクロスポスト時にも141文字を超えているかどうか判別し、もしそうならハイク向けも含め投稿を中止します。

//File that writes log when posting it. (f it is empty, nothing is done.)
$post_logging = './clihaiku_' . date('Ymd') . '_post.log';
//These operations are object to logging.(update|upload|star|reply|destar|delete)
$en_post_logging_operation = 'update|upload|star|reply';

$post_logging は投稿操作のログを記録するファイル名です。この例「'./clihaiku_' . date('Ymd') . '_post.log'」では、カレントディレクトリに「clihaiku_20100202_post.log」といったファイルを日ごとに作成します。ここを空('')にした場合はログファイルは作成されません。
$en_post_logging_operation はロギングの対象となる操作を指定します。

//Whether it is converted before the image is up-loaded or not?(yes|custom|no)
$image_convert_function = 'yes';
//Directory that preserves image after it processes it.
$image_save_dir = './';
//Criteria whether to convert image(dot). 
$max_width = 800;
$max_height = 800;

$image_convert_function は画像をアップロードする前に変換処理を行うかどうかの選択です。yes なら haiku.php 内部の関数で、custom ならユーザが指定した方法(下記参照)で処理を行います。通常は yes か no とし、別の処理をする必要がある場合に custom を指定してください。

haiku.php 内部の処理では、画像が閾値よりも大きければ縮小を行います。このときの閾値を $max_width(最大幅)と $max_height(最大高)に指定します。これらよりも画像が大きければ、ここで指定した範囲に収まる様に縮小します。縮小後の画像は $image_save_dir に保存されます。

custom を選択した場合はこの下に PHP のユーザ定義関数の書式を使って imageCustom という名前の関数を書いてください。内部処理の代わりにこれが使われる様になります。これは画像ファイル名を受け取って、画像に対する処理を行って保存し、処理後のファイル名を返すものであるべきです。下の例では、ImageMagick の convert コマンドを呼び出しています。

//User function that converts image. 
//When you use the convert command of ImageMagick.
if ($image_convert_function == 'custom'){
function imageCustom($imagefile) {
	hoge('fuga');
	passthru("convert -geometry 50% {$imagefile} upload_{$imagefile}");
	return 'upload_' . basename($imagefile);
}
}
//-----------------------------------
//Style sheet that will be inserted when outputting it by HTML format.
$stylesheet = <<<EOL
body {
  color: black; background-color: white;
}

EOL;

$stylesheet には、HTML 出力時に style 要素の内容として挿入されるスタイルシート(CSS)を記入します。

//Scheme name used for OAuth authentication(https|http).
$oauth_scheme = 'https';

$oauth_scheme には、OAuth 接続時に使う通信のスキーム名を指定します。通常は変更する必要はありません。

なお、ファイル haiku.php の文字コードは UTF-8(BOM なし)、改行コードは LF です。また、場合によっては冒頭の #!/usr/bin/php の部分を適切な php 実行ファイルへのパスに変更する必要があるかもしれません。

使い方

PHP スクリプトをコマンドラインで実行する一般的な方法についての詳細は PHP 公式ウェブサイトの記事『PHP をコマンドラインから使用する』を参照してください。これ以下では cli/haiku.php の使い方について説明します。

簡易ヘルプ

cli/haiku.php を引数なしで実行すると、使い方についての簡単な情報を表示します。

$ ./haiku.php
cli/haiku.php : Command Line Dual Micro Blogging Tool
                 for Hatena Haiku and/or Twitter.
Version : 1.0
Usage:
	SIDIN | haiku.php {update} [*.(gif|jpg|jpeg|png|bmp)|x|t]
	haiku.php {upload} {*.(gif|jpg|jpeg|png|bmp)} [keyword]
	haiku.php {public} [page:nnn] [-s] [-h]
	haiku.php {follow|id:hatenaid|kw:keyword|
	           twitter|@twitterid|ment|mix} [page:nnn] [count:nnn] [-s] [-h]
	haiku.php {star|reply|destar|delete} {nnn}
	haiku.php {addfollow|defollow} {id:hatenaid|kw:keyword|@twitterid}
	STDIN | haiku.php {check}

基本的な使い方は haiku.php 操作 指示... という形になります。

update 操作

update 操作は投稿を行います。update が指定されると、haiku.php は標準入力を読み込んではてなハイクへ投稿します。"キーワード=本文"の形式で投稿することで、イコールの左辺がはてなハイクのキーワードになります。実行例を以下に示します。

$ echo "おはよう=おはようございます。" | ./haiku.php update morning.jpg

コマンドの実行結果を流し込むことも可能です。

$ uname -a | ./haiku.php update
[2010-03-02T16:18:43+09:00] Operation "update" success.
Kodakana @ Haiku 2010-03-02T16:18:44
Linux linux-7s2b 2.6.31.12-0.1-desktop #1 SMP PREEMPT 2010-01-27 08:20:11  0100 i686 i686 i386 GNU/Linux

update に指定可能な指示

update の後に 画像ファイル名 を指示すると、同時にその画像を添付して投稿します。x を指定した場合はハイクと Twitter の両方に、t を指定した場合は Twitter へのポストになります。画像ファイル名xt は排他であり、同時に指定することはできません。

upload 操作

upload 操作は、画像の投稿のみを行います。この場合、画像ファイル名 の指示が必須です。

$ ./haiku.php upload mycat.jpg

upload に指定可能な指示

画像ファイル名 の後に文字列 keyword を渡すと、そのキーワードへの投稿になります。

$ haiku.php upload mydog.jpg "うちのわんこ"

public 操作

public 操作は、「みんなの最新エントリー」を表示します。出力は less や more などに渡すと読みやすいでしょう。

$ php haiku.php public | less

public に指定可能な指示

public 操作には page:nnn(ページ番号指定)、-s(シングルラインモード)、-h(HTML 出力モード) が指定できます。

follow/id:hatenaid/kw:keyword/twitter/@twitterid/ment/mix 操作

操作 follow$hatenaid に代入されたユーザの following タイムラインを表示します。これは http://h.hatena.ne.jp/hatenaid/following に対応します。id:hatenaid は、hatenaid のエントリ一覧を表示します。kw:keyword は、keyword のタイムラインを表示します。twitter は、Twitter のホームタイムラインを表示します。ment は Twitter の Mentions を表示します。@twitterid は Twitter ユーザ twitterid のエントリ一覧を、mix は follow と twitter の内容を混ぜて表示します。

follow/id:hatenaid/kw:keyword/twitter/@twitterid/ment/mix に指定可能な指示

page:nnn と count:nnn

page:nnn または count:nnn を指示すると、取得するページまたはエントリ数を指定できます。nnn には三桁までの数字を入れてください。これらは同時に指示することもできます。

$ php -f haiku.php kw:今日のアイス count:50
$ ./haiku.php follow page:3

mix の場合は、例えば page:20 という指定は、はてなハイクと Twitter からそれぞれ20件ずつ(合計40件)という意味になります。

-s(シングルラインモード)

-s は、一エントリを一行で出力するシングルラインモードへのスイッチです。タイムラインを取得する操作の際に、-s を指示すると、シングルラインモードになります。例えば:

$ haiku.php id:Kodakana count:3 -s

上の例の出力は、下の様になります。


1. Kodakana @  2010-01-29T01:03:58 from cli/haiku.php ★6::br::----------------------------------------------------------::br::天文部=火星 南の空 かなり高く。今が見頃。::br::
2. Kodakana @  2010-01-29T00:15:27 from cli/haiku.php ★3::br::----------------------------------------------------------::br::WILLCOM=[[ipad]] の話題で持ちきりだけど今日 WILLCOM も Pit とかいう PDA 発表してんの。業務用だけど。::br::
3. Kodakana @  2010-01-29T00:02:33 from web ★2::br::----------------------------------------------------------::br::00:00:00 を取るお題=なぜかお題に空白が入ってしまった件。::br::

このオプションは、例えば、grep や sed などと組み合わせて、出力をフィルタする場合に便利です。下の例は、「特定の語句」が含まれるエントリのみを出力します。

$ ./haiku.php mix -s | grep "特定の語句"

さらに下の例は、「特定の語句」が含まれるエントリを隠した上、読みやすい様に整形して出力、表示します。このとき、上記初期設定で $slmode_subst_linebreak に代入した文字列(ここでは「::br::」)が意味を持ちます。

$ php haiku.php mix -s | grep -v "特定の語句" | sed -e "s/::br::/\n/g" | less

-s と -h を同時に指定した場合は、改行コードが削除されるのみで $slmode_subst_linebreak は挿入されません。

-h(HTML 出力モード)

-h は出力を HTML 形式で整形します。例えば w3m の様なキャラクタベースのウェブブラウザでタイムラインを読むときに便利です。

$ haiku.php public page:2 -h | w3m -T text/html

HTML 出力をファイルにリダイレクトすると、標準入力からのコンテンツ読み込みに対応していないウェブブラウザでタイムラインを読むこともできます。

$ haiku.php follow -h count:40 > output.html && firefox output.html

star/reply/destar/delete 操作

star 操作は星付け、reply 操作は返信を行います。starreplyの後ろに番号を指示する必要があります。この番号は、直前に public/follow/id:hatenaid/kw:keyword/twitter/@twitterid/mix 操作で取得したタイムラインの cli/haiku.php による表示上の順位で、各エントリの先頭に付く番号に対応します。則ちこの操作は、一度タイムラインを取得した後にのみ行うことができます。この番号に対応する各エントリの ID は、タイムラインの出力後に一時ファイルに保存されます。Twitter のタイムラインを表示した直後では、この操作は Twitter に対するものになります。

例えば:

1. AntoineDoinel @ 2010-01-24T21:35:15+09:00 ★1
------------------------------------------------
@kaminagi カミナギ=いえなにこちらこそ、お早いReplyありがとうございました

2. kaminagi @ 2010-01-24T21:33:18+09:00 ★2
------------------------------------------------
@AntoineDoinel カミナギ=…そのシーン全滅する悪寒 ご来店ありがとうございました!

3. AntoineDoinel @ 2010-01-24T21:32:44+09:00
------------------------------------------------
@kaminagi カミナギ=どこどこ、どこにイケメンが

4. kaminagi @ 2010-01-24T21:31:14+09:00 ★1
------------------------------------------------
カミナギ=この味は…お前だ!おまけに、ほら、その画面のイケメンよりも何倍も得をする。

上の様なタイムラインで、3番目のエントリに星を付けたい場合は、下の様に実行します。

$ haiku.php star 3

返信の操作もこれと同様です。返信の内容は update 操作と同じく、標準入力から読み込みます。

$ echo "これはいい画像ですね!" | haiku.php reply 4

対象が Twitter の場合は、返信の内容に「@返信相手名」が入っている必要があります。

$ echo "@kaminagi どの画面?" | haiku.php reply 4

destardelete は、それぞれ自分が付けた星と、自分が投稿したエントリを削除する操作です。操作方法は star と同様です。

なお、デフォルトの設定では一時ファイルがカレントディレクトリに保存されるため、タイムラインを取得した後にカレントディレクトリを変更した場合、これらの操作は行うことが出来ません。上記初期設定を参照し、変数 $temp_file に絶対パスで一時ファイルを指定すると、どこのディレクトリにいても良い様になります。

addfollow/defollow 操作

addfollow/defollow 操作は指示として id:hatenaid/kw:keyword/@twitterid を取り、ハイク/Twitter ユーザまたはハイクキーワードをフォローする、フォローを解除するものです。

下の例ははてなハイクの kaminagi をフォローします。

$ haiku.php follow id:kaminagi

下の例ははてなハイクのキーワード「カミナギ」をフォローします。

$ haiku.php follow kw:カミナギ

下の例は Twitter の kaminagi をフォローから外します。

$ haiku.php defollow @kaminagi

check 操作

check 操作は、標準入力から文字列を読み込んで文字数を表示します。内容が141文字以上であった場合は、内容を140文字ごとに区切って箇条書きにしたものを付け加えます。

$ echo \                                 
> " 吾輩(わがはい)は猫である。名前はまだ無い。                               
>  どこで生れたかとんと見当(けんとう)がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く。どうも咽(む)せぽくて実に弱った。これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。" | ./haiku.php check
Length: 522
It divided every 140 chars :
1:  吾輩(わがはい)は猫である。名前はまだ無い。
 どこで生れたかとんと見当(けんとう)がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であ
2: ったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという 話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生
3: の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。この時妙なも のだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。
4: のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷう と煙(けむり)を吹く。どうも咽(む)せぽくて実に弱った。これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。