2008年11月アーカイブ

LDR (livedoor Reader) のピンを取得してくるプログラムを以下の通り、PHP で実装しましたが、Python でもやってみたくなり再実装。

まずは、Python での HTTP クライアントの実現方法から調査し始め...

[J] HTTP クライアント (Web クライアント) - Python 編 - Jamz

ようやく形になった。

ただ、今のところ、POST でデータを取得するとこまで。なのでデータ形式が JSON のままですが ... おいおい整形していきます。

先にコードを晒しておきます。

#!/usr/bin/env python
# coding: UTF-8
 
import urllib, urllib2, cookielib
import simplejson
 
LIVEDOOR_ID = 'your_id'
PASSWORD = 'your_password'
LDR_URL = 'http://reader.livedoor.com/reader/'
PIN_GET_URL = 'http://reader.livedoor.com/api/pin/all'
 
cookie_jar = cookielib.CookieJar()
url_opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
 
res = url_opener.open(LDR_URL)
 
url_query = urllib.urlencode({'livedoor_id':LIVEDOOR_ID, 'password':PASSWORD})
res = url_opener.open(res.geturl(), url_query)
pin_json = url_opener.open(PIN_GET_URL, url_query).read()
pin_data = simplejson.loads(pin_json)
 
for pin in pin_data:
  print pin['title']
  print pin['link']

書いてて思ったけど、やはり pyBrowser (勝手に名付けているだけで、そんなモジュールはない) が欲しい。Cookie を意識してセットしないといけないあたりが面倒。

Twitter の API を扱う python-twitter - Google Code を参考にすれば ? そのあたりを隠蔽したモジュールが作れそう。

それとリクエストを発行するときにクエリーがなくても明示的に POST できる方法はないのか。

http://reader.livedoor.com/api/pin/all は、クエリーがないけど POST でリクエストを発行しないといけないので (ry

以下のあたり色々みたけど分からず。

誰か教えて...

おまけ - Python でスクリプト書くときのお作法

python お作法的には、もう少し違う書き方がいいのかも。

iTunesで聞いている曲をTwitterにPostするPythonのスクリプト -- TRIVIAL TECHNOLOGIES 2.0

上記、ats さんのコードを見てみると、スクリプトの場合、以下のような作法 ? で書くと良さ気。

  1. if __name__ == '__main__': とか使って、その中で定数的なものを定義 (変数の値を設定) して
  2. def function_name に実質的な処理を記述

他にも、以下のあたりで同様に if __name__ == '__main__': している。

おまけはこの辺で。

読み込んでいないので、まだちゃんと理解できていません。なんだか面倒なことになりそうだなぁ。

名刺交換した人にも、こういう案内が必要になるのでしょうか ?

動きはじめている企業もチラホラ。先日、とある企業から以下のようなメールを受け取ったけど、これって迷惑メール防止法に対応できているのかなぁ ?

本メールは、弊社営業と名刺交換をさせて頂いた方、弊社へ資料請求して頂いた方にお送りさせて頂いております。

平素、お世話になっております。
xxx会社 xxx 編集事務局でございます。

12月1日より施行されます「特定電子メールの送信の適正化等に関する法律」改正に伴い、弊社からさし上げております、メールマガジンについてご確認させて頂きたく存じます。

お知らせの配信停止・登録情報の変更をご希望される場合は、表題に変更内容を記載し、本メール内容をそのままご返信ください。

配信停止のご返信がない場合は、配信にご同意いただいたものとして案内メールを送信させていただきますので、ご了承くださいますようお願い申し上げます。

尚、送信先の変更・配信停止の情報は2008/10/27時点のものになっております。すでにご連絡をいただいている場合は、行き違いの失礼を何卒ご容赦ください。

配信メールを受け取る許諾を取った「証拠」が必要なんですよね ?

だとしたら、上記のようなやり方では証拠にならない気がするんですが...

拒否の返信が来ないから、それが証拠 ? それって証拠じゃないですよね ?

何か間違っている気する。

それとも、この程度の確認で良いのか ... ?

利用するモジュールは以下のあたりっぽい。

  • urllib
  • urllib2
  • cookielib
  • httplib

これらを利用したラッパーモジュールがあるといいんだけど...

pyBrowser とかぁ ?

urllib まわりの情報。

昨日作ったLDR のピンの取得、できた - Jamz を Python で最実装してみるかっ。上にあげたページを見ていると、なんかいけそうな気がしてきた。

twitter でゴニョゴニョしている例があった。

もがわのほとり: 発作的にtwitter クライアントをpythonで実装してみる

pyBrowser なんていらんな、たぶん。

もうちょっと深い情報。

urllib2 で HEAD 要求

urllib2 モジュールで http プロトコルを使用する際選べる(選ばれる)メソッドは GET か POST 。では HEAD で十分な時は http モジュールレベルまで戻らなくてはいけないのだろうか? もしくは問答無用で GET して対象サーバーにはごめんなさいで済ませるのか? さすがにこれはない、はず。

コード読んでみた。

urllib2.Request.get_method メソッドは has.data() の真偽値を見て GET か POST を返すようになっている。

銀月の符号

頻度がわからないけど、頻繁にリークするなら、この対処を知ることはすごく大事なことだと思うのだけど... 内容が濃いぃ。

Pythonのurllib2がメモリリークする件 - YA55AI

時期なので色々情報が出ていますが、今のところ最有力なのがこちら。

シンプルな2009年カレンダーPDF無料ダウンロード | ウェブスタジオ アラクネ

気に入ったのが「日曜はじまり/月曜はじまり」を選べるところ。慣れの問題なので1, 2ヶ月利用すればどっちでも大丈夫だけど。

他にもいくつかあったのでメモ。

いわゆる LPO と呼ばれているものの実装ってことかな ?

ニュースリリース:インターウォーブン・ジャパン(株) 代表取締役 熊代 悟氏に訊く 新機能「ターゲティング」の狙い

インターウォーブンは,昨年に米国において「ターゲティング」をすでにリリースしている。当初の機能は,プロファイル(登録されたユーザ情報)によるターゲティングのみであったが,今回,日本語版のリリースに合わせて,プロファイル情報のない初めてのサイト訪問者に対しても「参照URLおよびキーワード」「ページ遷移」「ブラウザおよびOS」「GeoIP(訪問者の地域)」などによるターゲティングルールの適用が可能となった。

「とくにECサイトなどを見た場合,Webの利用率の向上は顕著です。このとき,サイト運営側は,ユーザの年齢や性別,住所,購入履歴などさまざまな属性を集めることができます。これをうまく活用し,ユーザにとって最適なコンテンツを提供することが大切になります。その際,ユーザ自身のサイト訪問の目的を配慮することが求められます。たとえば,旅行サイトを考えた場合,これから予約をするのか,あるいはすでに予約をしている状態なのかを判別したうえで,旅行ツアー情報を配信したり,旅先でのオプションや観光情報を配信するといった選択が必要になるのです。こうしたユーザに向けたターゲティング,すなわちWeb上での"おもてなし"を実現できるのが,今回リリースした当社の「ターゲティング」になります。

gihyo.jp ... 技術評論社

ダラダラと調べながら数日おきにトライしていたので大分、時間がかかりましたが、ようやく簡易プログラム書いて実験できた。

癖、というや何をやるにも一歩踏み出す前の事前調査が長いのですが、調べることも尽きてきたので実際にプログラムを書くことに。

まずは、もろサンプルとして利用できそうな以下の Perl のプログラムを動かしてみた。

livedoor Readerのピンを取得するスクリプト - Vox

っが、これがうまく動かない。
以下のようなエラーが発生。

'jsonToObj' will be obsoleted. Please use 'from_json' instead.

JSON.pm のメソッドで jsonToObj というのは古いらしく、from_json を使え、ということらしい。

JSON::from_json にコードを修正して再チャレンジ。

しかし、うまくいかない。
別のエラーが...

malformed JSON string, neither array, object, number, string or atom, at character offset 1 ["\x{8b}\x{8}\x{0}\x{0}..."]

などと怒られてしまい、文字コードの問題なのか、うまく JSON 形式のデータを取得できていないのか、Perl のデバッグ方法がよくわかっていないので、かなり面倒臭くなってしまった。

気持ちを切り替えて、rhaco で再実装。

<?php
require_once 'rhaco/Rhaco.php';
 
Rhaco::import('network.http.Browser');
 
Rhaco::constant('LIVEDOOR_ID', 'your_id');
Rhaco::constant('PASSWORD', 'your_password');
Rhaco::constant('LDR_URL', 'http://reader.livedoor.com/reader/');
Rhaco::constant('PIN_GET_URL', 'http://reader.livedoor.com/api/pin/all');
 
$browser = new Browser();
 
$browser->get(Rhaco::constant('LDR_URL'));
$browser->setVariable('livedoor_id', Rhaco::constant('LIVEDOOR_ID'));
$browser->setVariable('password', Rhaco::constant('PASSWORD'));
$browser->submit();
 
$pin_data = $browser->post(Rhaco::constant('PIN_GET_URL'));
$pins = json_decode($pin_data, true);
 
foreach ($pins as $key => $value) {
    echo $value['title'];
    echo $value['link'];
}
?>

実は最初から上記コードが書けたわけではなく、何度がエラーがあり以下のような修正を加えて完成した。

  • network.http.Browser に clearVariable というメソッドは 1.6.1 にはないらしいので $browser->clearVariable(); を削除
  • LDR の非公開の API はどうやら POST のみを受け付けているのでメソッドを $browser->get ではなく、$browser->post に変更

後者に気づくのに結構時間を取られた。45分くらい。

Firefox の拡張の Live HTTP Headers で覗いてみたら POST /api/pin/all HTTP/1.1 と出力されていて、コードを修正してみたらうまくいったわけでして...。

取り敢えず、ここまで。

今後、作りたいのはピンのデータを持ってきて DB などに保存して、ブックマークなどに POST して、翌朝メールする、みたいな感じ。

おまけ

LDR のピン関連でゴニョゴニョしている人が他にもいた。

残念と書いておいて一度も使ったことないけど、ネット業界でない周りの友達なんかが数名利用していて認知はあったと思う。

収益モデルを作れなかったんだろうなぁ。

snapfish-priea.jpのキャプチャ

以下、数日中に調べて書く、書きたい。

  • コピーライティングに強いウェブ制作会社
  • ウェブサイトのユーザビリティテストのサービス (を提供している会社)
  • 計画書の再考
  • 企画書について

軽く検索した結果を無造作にリンク。

まずはライティング。

ユーザビリティテスト関連。

計画書。

企画書。

スクレイピングを色々したくて使い勝手の良さそうな HTTP クライアントを調査。この結果で当面メインで使う言語が決まると思う。

今回の要件は、単に HTML の解析ということだけではなく、ログインが必要なウェブサービスも処理の対象になる予定なので HTTP クライアントの機能も必要になる。

まずは PHP 編。っつーか、rhaco 編。

基本のモジュールとして、以下を使う。

ログインして xxx するみたいな例もいくつかエントリーが出ているので参考になる。

SimpleTag の拡張を発見。

PHPでさくっとスクレイピングしたい。SimpleScrape - gounx2の日記

そのほか、PHP でスクレイピングする際のライブラリをまとめているページがあった。

PHPでのスクレイピングに役立つライブラリ - (DxD)∞

上記ページで rhaco の Browser に相当する HTTP (Web) クライアントライブラリを発見。

Snoopy

Magpie RSS という RSS のパーサーにも使われているし、最近もバージョンアップされていて開発も活発そうなので、それなりに良さ気。

さてさて、次は Pyhon あたりも見てみるかなぁ。

Typepad が日本語を含む URL に対応した (変更した ?) ようだが、現時点で "日本語を含む URL" というのはどのような評価になっているのだろう。

RFC 的な意味での正否、SEO 的な意味での有効性、利用者の感情値、それぞれについて知りたいなぁ。

後で、調べてみよう。

昔、仕事で利用していた海外製の CMS が2, 3年前にこの "日本語を含む URL" を導入しはじめて、その時は「なにやってんだよー」と思っていたが、以外に先見の明があったのかも ...

"日本語を含む URL" であって、日本語ドメインではないので、念のため。

例を出すと、http://日本語.jp/ ではなく、http://example.com/日本語タイトルのページ.html のことです。

回答から書くと、「ラポールを取る」の略。今、読んでる本に「ラポを取る」という表現があり、分からなかったので。

コンサルタントの「質問力」 (PHPビジネス新書 52)
野口 吉昭
PHP研究所
売り上げランキング: 1472
おすすめ度の平均: 4.0
1 わりと当たり前のことを仰々しく言ってるだけのような気が・・・
3 コンサルの方と会う前に読む本
1 正直、ファンの一人として残念でした。
1 表面的で内容がない
3 読み物としては面白いが、実践できるのかと自問すると。

以下のページがなんとかヒットしたから理解できたけど、薄識 (なんて言葉あるか分からないけど) な僕は知らなかった。

コンサルタントの「質問力」 野口吉昭

たとえば、仮説力のところで「いわゆる『ラポを取る』ようにするのだ」とありましたが、一般的にラポと言う言葉は使われていないと思いますし、試しにヤフーやグーグルでも検索しましたがヒットしませんでした。

話の流れから「ラポールを取る」の略だと思われますが、これはNLP(神経言語プログラミング)などの臨床心理学の用語ですので、コンサルタントやコーチングなどの経験がないと何の事か分からない気がしますし、啓蟄という漢字をふりがな無しで「けいちつ」と読める人もそう多くはないと思うのですが・・・(私だけ?)

HIDEのはじめの一歩

関連情報があったので後で読んでおく。

ファシリテーションするという意味で、コンサルとコーチングはすごく近い。

NLP(神経言語プログラミング)ビジネスコーチング「コミュニケーション心理学」

突き詰めていくと、心理学なんかも必要なんだろうなぁ。

Web サービス

メールピア MAILPIA Web RSS 更新通知サービス

なんと沖電気がこんなサービスを。キーワードでフィルタリングできるだけでなく、数値条件指定なんていう気になる機能も。

ブログパーツ - Bmail|ブログの更新情報がケータイメールに届く!

一時、このブログパーツよく見かけたけど、最近見ないなぁ。

MixFeed | ブログメール : RSS配信・リミックスウェブ・WEB2.0

MixFeed のサービス自体もなかなかいいんだよね。コンセプトは。

でも、フィードが 30 しか登録できないってのは如何なものかと。大量にさばけるのがフィードのよいところなわけだから。

更新お知らせ君 --新着RSSメール通知サービス

サイトは古い感じのでデザインだけど、サービス自体はつい最近オープンされたみたい。

オンラインの RSS リーダーにメール通知機能があるものも。

更新メール設定 - RSSリーダー

ちょっとマイナーな Flash ベースのオンラインの RSS リーダー。

そのほか

調べていて気になったツールをいくつか紹介。

Melkjug Project - OpenPlans

MixFeed のオープンソース版ともいえそうなアプリ。Python で実装されているのがいい。ソースを見ると Pylons という気になるキーワードが...

もしや Pylons ベース ?

フィードをマージ、フィルタリングして最適化「melkjug」

melkjugは、様々なフィードを登録し、それをフィルタリングしたりソートし直したりして再配信するシステムだ。

MOONGIFT: オープンソースを毎日紹介

Fastladder の CakePHP による再実装。

openflp - Google Code

RSS を利用しはじめのころよくつかっていた Perl スクリプト

hail2u.net - RSS RSS Headline Mailer

192.0.2.0/24 だそうだ。IPv6 なら 2001:DB8::/32

例として推奨されているドメイン名とIPアドレス - あどけない話

解説記事や発表資料で、ドメインの例を出す場合、example.jp等を使うことが推奨されているのを知っている人は多いでしょう。しかし、IPアドレスの方は知らない人もいるみたいです。ここでは両方について出典を示しながらまとめます。

あどけない話


Postfix のインストールは完了したんだけど、サーバー (localhost) 上で mail コマンド使っても、クライアントからメーラー利用してもメールの送受信がうまくいかない。

インストールは以下を参考に行った。

メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築

動作確認の方法はいくつかある。

まずは、オーソドックスに Postfix をインストールしたサーバー内で mail コマンド を使って動作確認する方法。

  1. mail コマンドでメール送信
  2. mail -n でチェック

メールのチェックは less /var/spool/mail/user_name なんかでスプールの中を直接見るのでもよい。

ただし、メールの保存形式が Mailbox ならという前提。

qmail 式の Maildir で設定していたから mail コマンドではメールが流れ着いたかどうかを確認することはできない ... はず。

保存形式が Maildir の場合にメールが届いたか確認するには ~/Maildir/ の中身を覗けば良い。

メールの流れや Postfix の仕組みに関しては、以下のあたりが参考になる。

5.1.5 Postfixの構造

こうした情報は全て /usr/local/share/doc/postfix/ 以下にあります。

5.1 mail の仕組みとPostfix

他にどうやって動作確認できるか調べていたら postfix check で設定内容が正常かどうか確認できることを知った。

よくよく考えたら基本的なことを見落としていた。まずは view /var/log/maillog でログを見るべきだった。

fatal: open database /etc/postfix/virtual.db

何のことはない、設定ファイルの書き込みだけで、マッピングし忘れていただけだった。
これによって正常起動できずに中途半端に立ち上がっていたようだ。

postmap /etc/postfix/virtual で解決。

コメント書いてる余裕がほとんどないので走り書きエントリー。

流通BMS (流通ビジネスメッセージ標準) というのがあるようで、EDI の進化形といった感じでしょうか ?

流通BMS って何 ?

【流通ビジネスメッセージ標準(流通BMS)について】

流通BMSは、経済産業省の「流通システム標準化事業」のもと、2006年度にグロッサリー商材での小売・卸業13社による共同実証を経て、2007年4月に新しいEDIの規格として策定・Ver.1.0が公開された日本の流通業界における唯一のEDI標準規約です。

通信基盤にはインターネット、データ項目の表現形式にはXMLを採用するなどデータフォーマットや業務プロセスにおいても標準化され、共同実証では、取引先毎のプログラム本数を50分の1に削減できたほか、通信時間を94%短縮できたなどの成果が出ており、今後サプライチェーン全体で業務が効率化されると期待されています。2007年度はアパレルおよび生鮮へ、2008年

DAL-データ・アプリケーション|バックナンバー:Press Release

プレスからの引用だけど、もう少し調べて知っておく必要がありそう。

MOONGIFTで紹介されて ? にわかに注目を集めているようだ。

Concrete5 :: Content management is your right.

必見!怖くなるくらい優秀なCMS「concrete5」

concrete5はPHP+MySQLで作られたCMSで、ユーザ画面を表示しながらその場でデータの編集ができる。さらにヘッダやメインコンテンツについてブロックを追加することも可能だ。DekiWikiのようにmonoが必須で、インストールが面倒なんてこともない。専用のウィザード画面で、ワンクリックでインストールが終わってしまう。

ブロックはHTML文書の他に、フォーム、ファイル(パスワード付きダウンロードも可能)、Flash、Googleマップ、画像、スライドショー、検索、投票、Youtubeビデオなどなど。もちろん自作もできる。

編集画面でテーマを変更すれば、画面のデザインは一新される。編集結果はバージョン管理され、後から前のバージョンを参照したり戻したりすることが可能だ。さらにパーミッション設定を行って、ゲスト/登録ユーザ/管理者の三段階について閲覧、編集権限を設定できる。

管理画面ではサイトマップやファイル管理、フォームの登録内容、ユーザ管理やブロックの追加などを行える。もちろんアクセス管理機能だってある。いやはや、こんなものを見せられると何かを一から構築しようという気がなくなってしまう。

MOONGIFT:オープンソースを毎日紹介

iPhone のおかげで RSS リーダーの利用を日常生活に復活させることができた。

RSS リーダーの情報は新聞の流し読みと同じ扱いなので、通勤時間などの細切れな、短い時間を如何に有効活用して、それに費やすかが僕の中で焦点だった。

iPhone はそれをなんなくクリアしてくれたわけです。

話をすっ飛ばして書くと、livedoor リーダーが今の RSS リーダーでして、気になった記事をクリップするピン機能は 100 件しか保存してくれない。

これがとても不便。

今月リリースされる、全文検索ができる次期はてなブックマークを視野に入れてのことなんだけど、ピンを外部のブックマークなどに保存できる仕組みが必要になってきた。

そのために、このメモが必要。

しかしっ! 公式で外部に提供されている API は二つしかない。

二つしかないのかよっ !

以前、大元を開発した ma.la さんの解説を聞いたことがあり、そのときにも言っていたけど、livedoor Reader はアプリ自体が API を多様した作りになっているとか。

要は、スクレイピングしてプログラムでゴニョゴニョすれば何でもやれちゃう感じ。

livedoor Reader で利用されている API を紹介しているエントリーを発見。

livedoor ReaderのAPI一覧 - ヨコナビ

しかし、肝心のピンに関する情報が見つからない。

ネットを俳諧していると関連ありそうなものをようやく見つけた。

livedoor Reader 公開当初、ピンはセッション単位でしか保存されていなかったのか、ローカルに保存できる Greasemonkey を開発した人がいた。

livedoor Reader の、ピンの状態をローカルマシンに保存する greasemonkey スクリプト - antipop

以前は、ピンは保存されていなかったんだぁ。

でも、これ、JavaScript の function で ? 細かい処理が見えないから実際何しているのか、いまいち理解できなかった。

粘って探していたら、まんまのエントリーをようやく発見。

livedoor Readerのピンを取得するスクリプト - Vox

簡単に処理を書き出すと以下のようになる

  1. プログラム内でブラウザのようなクライアントを利用し、livedoor にログイン
  2. http://reader.livedoor.com/api/pin/all にリクエストを発行して
  3. JSON 形式のレスポンスを受け取って
  4. 好きなようにゴニョゴニョ

ここまでわかれば後は実装するだけ、rhaco には必要はライブラリが含まれているようなので今回は PHP で開発してみるかな。

おまけ

世に公開されている API 一覧を今度まとめてみたいなぁ。

このアーカイブについて

このページには、2008年11月に書かれたブログ記事が新しい順に公開されています。

次のアーカイブは2008年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。