2012-02-23
完全ではないけれど自分で理解して第一の目的を達成できた 〜Blog記事からツイアカ取得に向けたBookmarkletのお勉強 Vol.2〜
Blog記事からTwitterアカウントを取得するBookmarkletを作りたいー! - @hebyumetan
上記の記事を書いたことで、一昨日からBookmarklet(JavaScript)のお勉強を開始した@hebyumetanです。
昨日は衝撃的というか、とっても嬉しいことがありました。
ブログ記事内のTwitterアカウントを取得するブックマークレットを作ってみました - もとまか日記乙
なんと、iOSアプリなどを開発なされている@motomakaさんがBookmarkletを作ってくださったのです。めっちゃ嬉しくってたまりませんです、はい(●^o^●)
さらにさらに、Twitterでもやり取りさせていただきました。
@motomaka 私の考えは方向性間違っていませんか? / URLをダイアログボックスで表示できた 〜Blog記事からツイアカ取得に向けたBookmarkletのお勉強 Vol.1〜 - @hebyumetan http://t.co/iByANQFr
@hebyumetan 拝見しました。外部の対応表の参照はメンテ大変そうなのと難易度も高そう、と思いました
@hebyumetan ただ、私が書いてる方法もよくなくて、一番確実なのはツイッターのURLを拾ってアカウント部分を取得する、かなと。それが一番確実なアカウントなので。
@motomaka ありがとうございます。ツイアカが複数あった場合、AppHtmlのように選択するという形ですね。
@hebyumetan もしくは、アカウントだけなら全部繋げて一回で、とか?
@motomaka おおおっ!それが一番いいですっ!伝えたいが目的ですからっ!
ということで、当初(っていっても昨日のことw)目指していた「URLとTwitterアカウントを対応表として記述したテキストファイル」を使うっていうのは、私にはまだまだとってもハードルが高そうなのでやめといて、
- 本文全体を取得(document.body.innerHTML)
- 余計な文字をカット(replace)
- 正規表現でTwitterアカウントをすべて検索(match)
- 検索された文字列を連結(???)
- 結果を表示(promp)
この方法にチャレンジすることにしました。
正規表現については、20年近く前、awkやperlでパソコン通信のログを集計したりするスクリプトを作っていたので、なんとかなるはず。でも、やっぱほとんど忘れている(^^;;
まずは、@motomakaさんが作られたBookmarkletの動きを理解しなくっちゃです。
▲あれあれ、あれれ。「javascript:」の後ろに「(」がないではないですか。「function」による関数も「var」による変数宣言と初期化もありません。いきなり頭が混乱です。初心者にありがちなパターンか?(^^;;
なので、自分が理解できる内容に変更することにしました。
▲前後の「()」と「var」を追加しただけです。あと、正規表現のところの「1,15」と「i」の意味が理解できずにいます。ちょっと調べてみましたがわからなかったので、この部分の理解は後回しとします。
javascript:(var%20tw=/@[0-9A-Za-z_]{1,15}/i;var%20b=document.body.innerHTML;b=b.replace('@gmail','');var%20r=b.match(tw);alert(r);)
半角スペースを「%20」に置換し、改行を削除して実行してみました。
………シーン
んがー、ダメだ。うんともすんともです(T_T)
▲「俺には無理ってことか_| ̄|○」となり、メゲそうになりましたが、めげてなるものかw
javascript:var%20tw=/@[0-9A-Za-z_]{1,15}/i;var%20b=document.body.innerHTML;b=b.replace('@gmail','');var%20r=b.match(tw);alert(r);
前後の「()」を削除して実行してみました。
でけた!やればできるじゃないの!「()」の削除だけwww
次は正規表現の理解です。「[0-9_a-z]」だと、たしか大文字の英字はヒットしなかったはず。
@RyoAnnaさんのBlogをお借りし(勝手にすみませんm(__)m)、実行してみました。
▲うむむ?@RyoAnnaさんのTwitterアカウントが表示されないのは、Twitterアカウント自体が記述されていないので理解できるんですが、大文字を含んでいる@StudioLoupeさんがヒットしている。なんでだ???
▲このように「[0-9A-Za-z_]」に変更して実行してみたところ、結果は同じでした。うーん。「なんとかなるはず」の正規表現でつまづいちゃうのか?
いやいや、こんなところではつまづきませんってば。またまた後回しです(^^;;
@motomakaさんからアドバイスいただいているとおり、Twitterアカウント自体ではなく、そのURLを拾ってこないとダメってことがわかりました。
このいずれかを正規表現ですべて検索し、その検索された文字列を連結してやればいいってこと。
いきなりそれを目指すのではなく、ひとつひとつを理解して進めます。
▲このように、正規表現の部分を「/http:\/\/twitter.com/i」に変更し、また、余計な文字をカット(replace)する記述を削除しました。
javascript:var%20tw=/http:\/\/twitter.com/i;var%20b=document.body.innerHTML;var%20r=b.match(tw);alert(r);
「/」のようなエスケープキャラクタを検索する場合には、その文字の前に「\」を付けてやるんですよね。思い出したぜw
ほれ、実行!
▲やったー!第一の目的達成じゃん(●^o^●)
トロも笑いだ! / takumi.412
しかし、これだけやるのに、同時にBlogの記事を書きながらとはいえ、なんと2時間もかかった(Togglちゃんがきっちり記録w)。無理はいかんぜよwww
つづく。
- 72 http://bit.ly/x5i1gS
- 64 http://j.mp/zER9hj
- 49 http://www.donpy.net
- 44 http://bit.ly/ArnpuR
- 37 http://www.facebook.com/plugins/like.php?channel_url=http://d.hatena.ne.jp/hebyumetan/20120125/1327523415?fb_xd_fragment#?=&cb=f2551e0e4ccf0c&relation=parent.parent&transport=fragment&extended_social_context=false&href=http
- 22 http://bit.ly/z2eQs5
- 21 http://longurl.org
- 18 http://www.google.co.jp/url?sa=t&rct=j&q=launch center&source=web&cd=4&sqi=2&ved=0CEcQFjAD&url=http://d.hatena.ne.jp/hebyumetan/20120213/1329083716&ei=vnJFT7meMKHKmAXP6qiEBA&usg=AFQjCNEtE7hgkbaFJy6IsHqYmWfcDU7tcw&sig2=GCu0dcdB7wZ6jkhJtyLmGg&
- 16 http://www.ig.gmodules.com/gadgets/ifr?exp_rpc_js=1&exp_track_js=1&url=http://www.hatena.ne.jp/tools/gadget/bookmark/bookmark_gadget.xml&container=ig&view=default&lang=ja&country=JP&sanitize=0&v=5a4c3346a9f09612&parent=http://www.google.co.j
- 15 http://b.hatena.ne.jp/