Location via proxy:   [ UP ]
 No cookies    No scripts    No ads    No referrer

@hebyumetan RSSフィード Twitter

2012-02-23

完全ではないけれど自分で理解して第一の目的を達成できた 〜Blog記事からツイアカ取得に向けたBookmarkletのお勉強 Vol.2〜

Blog記事からTwitterアカウントを取得するBookmarkletを作りたいー! - @hebyumetan

上記の記事を書いたことで、一昨日からBookmarkletJavaScript)のお勉強を開始した@hebyumetanです。

昨日は衝撃的というか、とっても嬉しいことがありました。

 

ブログ記事内のTwitterアカウントを取得するブックマークレットを作ってみました - もとまか日記乙

なんと、iOSアプリなどを開発なされている@motomakaさんがBookmarkletを作ってくださったのです。めっちゃ嬉しくってたまりませんです、はい(●^o^●)

さらにさらに、Twitterでもやり取りさせていただきました。

 

@motomaka 私の考えは方向性間違っていませんか? / URLダイアログボックスで表示できた 〜Blog記事からツイアカ取得に向けたBookmarkletのお勉強 Vol.1〜 - @hebyumetan http://t.co/iByANQFrTue Feb 21 21:22:12 via Janetter for Mac

@hebyumetan 拝見しました。外部の対応表の参照はメンテ大変そうなのと難易度も高そう、と思いましたWed Feb 22 03:21:05 via Tweetbot for iOS

@hebyumetan ただ、私が書いてる方法もよくなくて、一番確実なのはツイッターURLを拾ってアカウント部分を取得する、かなと。それが一番確実なアカウントなので。Wed Feb 22 03:21:35 via Tweetbot for iOS

@motomaka ありがとうございます。ツイアカが複数あった場合、AppHtmlのように選択するという形ですね。Wed Feb 22 03:28:57 via Tweetbot for iOS

@hebyumetan もしくは、アカウントだけなら全部繋げて一回で、とか?Wed Feb 22 03:31:14 via Tweetbot for iOS

@motomaka おおおっ!それが一番いいですっ!伝えたいが目的ですからっ!Wed Feb 22 03:44:51 via Tweetbot for iOS

 

ということで、当初(っていっても昨日のことw)目指していた「URLTwitterアカウントを対応表として記述したテキストファイル」を使うっていうのは、私にはまだまだとってもハードルが高そうなのでやめといて、

  1. 本文全体を取得(document.body.innerHTML)
  2. 余計な文字をカット(replace)
  3. 正規表現Twitterアカウントをすべて検索(match)
  4. 検索された文字列を連結(???)
  5. 結果を表示(promp)

この方法にチャレンジすることにしました。

正規表現については、20年近く前、awkperlパソコン通信のログを集計したりするスクリプトを作っていたので、なんとかなるはず。でも、やっぱほとんど忘れている(^^;;

まずは、@motomakaさんが作られたBookmarkletの動きを理解しなくっちゃです。

 

2012-02-23_0331

▲あれあれ、あれれ。「javascript:」の後ろに「(」がないではないですか。「function」による関数も「var」による変数宣言と初期化もありません。いきなり頭が混乱です。初心者にありがちなパターンか?(^^;;

なので、自分が理解できる内容に変更することにしました。

 

2012-02-23_0350

▲前後の「()」と「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)

 

2012-02-23_0355

▲「俺には無理ってことか_| ̄|○」となり、メゲそうになりましたが、めげてなるものか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);

前後の「()」を削除して実行してみました。

 

2012-02-23_0357

でけた!やればできるじゃないの!「()」の削除だけwww

 

次は正規表現の理解です。「[0-9_a-z]」だと、たしか大文字の英字はヒットしなかったはず。

 

#RyoAnnaBlog

@RyoAnnaさんのBlogをお借りし(勝手にすみませんm(__)m)、実行してみました。

 

2012-02-23_0416

▲うむむ?@RyoAnnaさんのTwitterアカウントが表示されないのは、Twitterアカウント自体が記述されていないので理解できるんですが、大文字を含んでいる@StudioLoupeさんがヒットしている。なんでだ???

 

2012-02-23_0426

▲このように「[0-9A-Za-z_]」に変更して実行してみたところ、結果は同じでした。うーん。「なんとかなるはず」の正規表現でつまづいちゃうのか?

いやいや、こんなところではつまづきませんってば。またまた後回しです(^^;;

 

@motomakaさんからアドバイスいただいているとおり、Twitterアカウント自体ではなく、そのURLを拾ってこないとダメってことがわかりました。

 

http://twitter.com/@[Twitterアカウント]

https://twitter.com/#!/@[Twitterアカウント]

 

このいずれかを正規表現ですべて検索し、その検索された文字列を連結してやればいいってこと。

いきなりそれを目指すのではなく、ひとつひとつを理解して進めます。

 

2012-02-23_0446

▲このように、正規表現の部分を「/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

ほれ、実行!

 

2012-02-23_0447

▲やったー!第一の目的達成じゃん(●^o^●)

 

トロも笑いだ!
トロも笑いだ! / takumi.412

 

しかし、これだけやるのに、同時にBlogの記事を書きながらとはいえ、なんと2時間もかかった(Togglちゃんがきっちり記録w)。無理はいかんぜよwww

つづく。

stryhstryh 2012/02/23 23:38 どもです! @saita_ryouheiです!
ヘビュさん作のBookmarkletを自分も試してみました。

で、RyoAnnaさんのところで@RyoAnnaがヒットしなかったのはDOM(HTMLソース)の1番最初に「@StudioLoupe」という文字列があったためではないかなと推測できます。
ここに「@RyoAnna」が最初にあれば@RyoAnnaと表示されるんじゃないかなと思います。

ためしにRyoAnnaさんの個別のエントリーページに遷移し実行したところ「@RyoAnna」と表示されました。

既に解決済みでしたらすいません (; ^ω^)

hebyumetanhebyumetan 2012/02/24 03:22 >@saita_ryouheiさん
試していただきありがとうございます(●^o^●)
その点には気付いていて、英字の大文字がヒットしたことが理解できないんです。
説明不足でした。申し訳ありませんm(__)m

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証