AppleScriptでbit.ly 〜 curlのhttp_proxy

2009/07/03 (金)  カテゴリー/AppleScript

 さて、先日以下のエントリを読みました。

Twitter を使うときに便利! TextExpander でクリップボードの URL を bit.ly で一発短縮するスクリプト

 TextExpanderというツールでbit.lyを利用する方法が紹介されています。なるほどねえ、と思って眺めてみると、とりあえずTextExpanderじゃなければ駄目っていう感じではなかったのでこれをパクって参考に、

「クリップボード内のURLをbit.lyで変換しちゃうスクリプト」

 を作ってみましょう。ちょうど最近Twitterを始めたのでネタ的にも( ゚д゚)ビンゴー
set the cbURL to (the clipboard as string)
if ((characters 1 through 4 of cbURL as string) is not "http") then
set the clipboard to "No http(" & (the clipboard as string) & ")"
else
set clCMD to "curl --stderr /dev/null 'http://bit.ly/api?url=" & cbURL & "'"
set the clipboard to (do shell script clCMD) as string
end if
※httpプロキシを利用している方はこのままでは動きませんので後述の説明をご覧ください

 えー、はっきり言って内容は全然変わってないと言っても過言ではありません。違う所は、curlの戻り値をクリップボードに返しているところだけです。。。あ、いやちょっと待って。本当のネタはここからなんです。

 今回のアップルスクリプトの内部では「curl」というコマンドラインツールが使用されています。これは何かと超簡単に言いますとWEBサーバからの返事をターミナルで取得できるコマンドです。ブラウザの「ソースを表示」で表示されるテキストを文字列として取得できるわけですね。まあ、用途はこれだけではありませんが今回のスクリプトでは単純にこの機能を利用しています。

 自分の家なんかで使っている分には問題ないのですが、企業の社内LANなど、プロキシサーバを経由してhttpアクセスをしている環境だとこのcurlを使用するのに一工夫必要になります。シェルの環境変数「http_proxy」ってのを設定せねばなりません。

 さて以下のようなhttpプロキシサーバを利用していると仮定し話を進めて行きます。

ホスト hirakun.example.com
ポート 8080
ユーザ hirakun
パスワード heyhey
※以下、プロキシ指定に上記の値を使用して記述していますので、実際に自分の環境で試す場合はご自身の利用しているプロキシサーバの値に書き換えてください。

 curlはコマンドを実行する際にプロキシを指定するオプションがあります。ただ、そんなもんを毎回入力するのはばからしいので、以下の設定を行います。

 ログインシェルをbashとして説明しますとユーザのホームディレクトリにある「.bash_profile」に次の1行を記入。これだけです。
export http_proxy='hirakun:heyhey@hirakun.example.com:8080'
 この設定をしておけば、
curl http://www.yahoo.co.jp
 なーんてターミナルで実行したとたんにyahooのトップページのソースがずらずらと表示されちゃいます。もう、わくわくしちゃいますねえ。さてこんなcurlですがアップルスクリプトから使うとなるとまた一工夫必要です。

 アップルスクリプトから使用する場合はbash_profileで設定した環境変数を読んでくれません(正確にはわかりませんが10.4では試しにやったら駄目だった)。そんな訳でAppleScript内からdo shell scriptする文字列にプロキシの設定を入れておかなければなりません。curlのオプション指定でもいいのですが、どうせなら複数コマンドの同時実行という「知ってるとなにげに便利な方法」でやってみましょう。

 シェルで複数のコマンドを一度に実行したい場合はコマンドをセミコロンで区切ります。アップルスクリプトのdo shell script コマンドはシェルのプロセスをそのつど生成するので、
「cdでディレクトリの移動をした後にリストを取りたい」
 なんていう処理を行うにはこの複数のコマンドを同時に実行する方法が必要となります。
参考URL:do shell script コマンドの基本テクニック

 さて今回はわざわざ複数コマンドにしなくてもいいんですが、こんな感じです。前述のスクリプトの該当部分を以下のように記述します。
set clCMD to "export http_proxy=hirakun:heyhey@hirakun.example.com:8080;curl --stderr /dev/null 'http://bit.ly/api?url=" & cbURL & "'"
 これでプロキシ経由でアクセスしている環境でもクリップボード内のURLを短縮できます。アップルスクリプトをホットキーに設定できるユーティリティなんかと組み合わせると結構便利です。私はFireFoxでTwitterFoxというアドオンを利用しているのですがURL短縮機能がなかったので結構重宝しております☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ

動物病院

2009/06/29 (月)  カテゴリー/日々の出来事

 我が家のワンちゃん。結構前から皮膚病っぽくて病院に行かないとなあと思っていたのですが、今月の半ばくらいからだんだん症状が治まってきたので、
「お? だんだん綺麗になってきたかな?」
 なーんて思っていたのが大間違い。2〜3日前に爪か何かをひっかけたのか、左肩あたりにちょっとした傷ができたかと思ったら、だんだんとその傷の周りに炎症が起こってきたみたい。
「なんてこった!」
 ということで、来週どこかのタイミングで病院につれて行こうかと思います。本当は週末につれていければよかったんですが。。。(;_; ごめんよー。
 いろいろ悩んだんですが、やっぱ近場の病院がいいですよねえ。今日のお昼にでも電話で予約してみよう。

ロマンスカー

2009/06/27 (土)  カテゴリー/イーモバイル

20090627122020

ニューブロック

2009/06/25 (木)  カテゴリー/子供

20090625222356

近所のトイザラスで本日お買い上げ(* ̄m ̄* 899円でした。
娘の作品です。おんぼろカーペットで見苦しいのはご勘弁を。
ちなみに右端に写ってるのは娘のおみ足でございます。
買う前は、
「いらないよー」
と呟いていた娘ですが、いざ買って帰るとけっこう夢中で楽しんでいます。
しばらくしたら追加のセットを購入ですな。

REALbasic 2009R1で見つけたバグ

2009/06/23 (火)  カテゴリー/REALbasic

 私が使用しているマックは、
Mac OS X 10.4.11 PPC
 でございます。この環境で、
REALbasic 2009 Release 1 プロフェッショナル版
 で、確認したバグ情報をお知らせいたします。

 私の使用しているものはプロフェッショナル版なので複数プラットフォームのビルドが可能となっております。今回Windows向けビルドで見つかったバグをお知らせいたします。では、最近すっかり寂しい感じのREALbasic日本語フォーラムのテンプレートを使用して行ってみませふ。

1.簡単な説明
 クリップボードにセットしたテキストデータの文末が1バイト無くなってしまう

2.製品名・プラットフォーム
製品名:REALbasic 2009 Release 1 プロフェッショナル版
プラットフォーム:Mac OS X 10.4.11 PPC

3.バージョン
2009 Release 1

4.不具合の内容
Mac版プロフェッショナルでWindows向けビルドをすると発生。
クリップボードにテキストをセットすると文字列の文末1バイトがセットされない。
Mac向けビルドでは問題無し。

5.再現方法
新規プロジェクト
・Pushbuttonを配置
・PushbuttonのActionに以下のコードを記入
Dim myCp As new Clipboard
myCp.SetText "TEST"
myCp.Close
・Windows向けにビルド
・Windowsでアプリを実行
・Pushbuttonをクリック
・エディタにペーストすると「TES」がペーストされる
※リモートデバッガでチェックした限りではデバッガ上では正常に「TEST」がセットされています

6.対処方法
TargetWin32に該当する場合はクリップボードにテキストをセットする際に、テキストデータの末尾にダミーの1byte(Chr(0)など)をつける

 以上。たぶんどこにも話題が見当たらないのでMac版プロフェッショナルでWindowsビルドした際の問題なんだろうなあと思います。ただ2009R1ではWindowsのClipboadでピクチャの扱いにバグが有り、R2で修正されてるそうなのでR2だと修正されてるやもしれませんね。

テーマ : プログラミング - ジャンル : コンピュータ


あわせて読みたい