copy.js で YouTube のリンクを取得

現在閲覧している YouTube のページの簡潔なリンク、たとえば、 http://www.youtube.com/watch?v=O6jSDEMchJQ&feature=related ではなく、 http://www.youtube.com/watch?v=O6jSDEMchJQ という URI 文字列、を取得する copy.js の設定です。copy.js は、言うまでもなく、vimperator のプラグインのひとつです。

js <<EOF
liberator.globalVariables.copy_templates = [
  { label: 'youtube', value: 'Get a concise YouTube URI.',
    custom: function() {
      var ytURI = "";
      var videoId =
        content.document.getElementsByName("video_id").item(0).value;
      if ( videoId != "" ) {
        ytURI = "http://www.youtube.com/watch?v=" + videoId;
      }
      return ytURI;
    }
  },
];
EOF

copy.js で YouTube の短縮リンクを取得

Youtube の或るページを Firebug で調べていたときに、link タグ内に youtu.be/abcdef というような短縮 URI が埋め込まれていることを発見しました。copy.js だけでこの短縮 URI を取得することが可能です。

js <<EOF
liberator.globalVariables.copy_templates = [
  { label: 'youtu.be', value: 'Get a tiny URI of YouTube.',
    custom: function() {
      var linkObj = content.document.getElementsByTagName("link").item(6);
      var ytTinyURI = linkObj.getAttribute("href");
      return ytTinyURI;
    }
  },
];
EOF

copy.js と bitly.js で Amazon アフィリエイト・リンクを短縮 URL で取得

この記事、『 copy.js をアップデート よりカスタマイズ可能になりました 』、を参考にして作成した以下のようなコードを .vimperatorrc に書き込みます--copy.js が当然必要です。

js <<EOF
liberator.globalVariables.copy_templates = [
  { label: 'amazon', value: 'Get a short Amazon.co.jp affiliate URI.',
    custom: function() {
      var aaURI = "";
      var affiliateId = "your_id";
      var asin = content.document.getElementById('ASIN').value;
      if ( asin != "" ) {
        aaURI = "http://amazon.co.jp/o/ASIN/" + asin + "/" + affiliateId + "-22";
      }
      return aaURI;
    }
  },
];
EOF

your_id となっている箇所は、所有している Amazon アフィリエイト用の ID に置き換えてください。


AmazonアフィリエイトURI の作成については以下のページを参考にしました( 『AmazonのURL短縮』 )。


bitly.js を導入したあと、マクロを登録します--私の場合、vimperator 上で q キーで登録したマクロがどういうわけか保存されないということになってしまっていたので、 ~/.vimperator/info/ユーザー名/macros という JSON ファイルを直接編集しました。

{
  "a":":copy<Space>amazon<Return>:bitly<Space><C-v><C-v><Return>",
}

Firefox を再起動すれば、 @a のキーに Amazon アフィリエイトのリンク取得が割り当てられているようになっていると思います。


ちなみに、Amazon の短縮 URI は bit.ly のサービスを使用していますので、http://amzn.to/cyx9qo というような Amazon の公式の短縮 URI の形式でそれを取得することができます。

Common Lisp の簡易リファレンス

"Common Lisp the Language, 2nd Edition"(Guy L. Steele) は Common Lisp の仕様書であり、Web で公開されています。その HTML 文書を利用して、Common Lisp の簡易リファレンスをつくることができます — この方法はとても簡単ですので、公開の意義はほとんどないかもしれません。必要なものは、もちろん、"Common Lisp the Language, 2nd Edition" の HTML ヴァージョンです。


"Common Lisp the Language, 2nd Edition" の HTML ヴァージョンをダウンロードそして解凍しましょう。

wget http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz

tar zxvf cltl_ht.tgz

cltl_ht.tgz/home/user_name/doc/ 以下に解凍したものとします。

シェル・スクリプトを作成します。

#!/bin/sh
# ref_cltl.sh
# "Common Lisp the Language, 2nd Edition" 内の、
# 検索した関数などの定義が記されたページを閲覧します。

# "Common Lisp the Language, 2nd Edition" の HTML ファイルを含む
# ディレクトリを指定します。
CLTL_HOME=/home/user_name/doc/cltl

grep -lr "<tt>$1 " $CLTL_HOME/clm | (read LINE ; w3m $LINE)

このスクリプト ref_cltl.sh を chmod +x ./ref_cltl.sh として、 PATH が通っている場所に置きます。そして、たとえば、 ref_cltl.sh remove-if-not と打ちます(ref_cltl.sh [あなたが調べたい関数などの名前])。検索対象の定義が記された頁を w3m が開きます。


もうひとつの方法(未完成);

#!/bin/sh
# "Common Lisp the Language, 2nd Edition" 内の、
# 検索した関数の定義を抽出します。

CLTL_HOME=/home/username/doc/cltl
# grep -lr "<tt>$1 " $CLTL_HOME/clm | (read LINE ; w3m $LINE)
grep -hr -A 10 "<tt>$1 " $CLTL_HOME/clm | \
    sed -e 's/<[^>]*>//g' | \
    sed -e 's/\&amp;/\&/g'

w3m のローカル CGI として動く Twitter ビューアー

Twitter のフレンド・タイムラインを w3m を通して閲覧するだけの機能しか、この Perl スクリプトには、現在のところ、ありません。


このスクリプトの動作確認は、Fedora 10 そして openSUSE 11.1 で、しました。


このスクリプトのファイルは => http://purloinedletter.net/misc/apps/tw3m_cgi.utf8.txt

wassr 版はこちら => http://purloinedletter.net/misc/apps/was3m_cgi.utf8.txt

コードは以下。

#!/usr/bin/perl
# tw3m.cgi: w3m のローカル CGI として動く
# 簡易 Twitter ビューアー。
#
# cp this_script_file ~/cgi-bin/tw3m.cgi
# chmod +x ~/cgi-bin/tw3m.cgi
# w3m file:///cgi-bin/tw3m.cgi
# Enjoy!
#
# Last Update: 2009-07-06 01:42:04 .
# Kim, Yi-Chul 金利哲


use warnings;
use strict;
use utf8;


use LWP::UserAgent;
use JSON;
use Encode;



# Twitter で使用しているメールアドレス、パスワードを設定します。
my $username = 'hoge';
my $password = 'hogehoge';

# 何件のステータスを取得するかを設定します。
# 200 件までが推奨されています。
my $number_of_count = 100;


# Twitter API を通じて タイムラインの JSON 形式の
# データを取得します。
my $friend_timeline_data = &get_content($username, $password, $number_of_count);
# 取得した JSON データを Perl のデータに変換します。
my $status = decode_json $friend_timeline_data;


# HTML を出力します。
# HTML ヘッダー。
&header_html;

# フレンド・タイムラインのデータを基にして
# HTML を作成します。
foreach my $status (@$status) {

  print "<li>";

  # フレンドの画像の URI を取得します。
  my $image_uri = "$status->{user}->{profile_image_url}";
  print "<img src=$image_uri> ";
  # 名前を表示します。
  print "<b> $status->{user}->{screen_name} </b>: ";
  # ステータスを UTF8 でエンコードします。
  my $text = encode('utf8', $status->{text});
  print "$text";
  # ステータス ID も、ついでに、出力します。
  print " ( $status->{id} )";

  print "</li>";

}

# HTML フッター。
&footer_html;



sub get_content
{
  my ($uname, $pass, $count) = @_;

  my $api_uri = 'http://twitter.com/statuses/friends_timeline.json?count=';
  $api_uri = $api_uri . $count;


  my $ua = LWP::UserAgent->new;
  $ua->timeout(60);    # タイムアウトする秒数を設定します。
  require HTTP::Request;
  my $req = HTTP::Request->new(GET => $api_uri);
  # authorization_basic で認証用に
  # ユーザーネーム・パスワードを設定します。
  $req->authorization_basic($uname, $pass);

  # Twitter API からのレスポンスを取得します。
  my $res = $ua->request($req);
  # レスポンスから JSON 形式のデータ内容を抽出します。
  my $content = $res->content;

  return $content;
}


sub header_html {
print <<"HERE";
Content-type: text/html;charset=UTF-8

  <html>\n
    <body>\n
      <ul>\n
HERE
}

sub footer_html {
  print <<"HERE";
      </ul>\n
    </body>\n
  </html>\n
HERE
}