tumblrのshowページでautopagerizeがつかいたい!

ということでしらべてみた.すげぇ汚いメモだけど、オープンする.

http://www.tumblr.com/show/{everything|text|photos|quotes|links|chats|videos|audios}/by/{everyone|me}

というurlになるのな.これらのページでautopagerizeがつかいたい!

HOW TO EDIT SITEINFO

Please check the script source code itself.
ソースを読むとわかります。

url

対象となるサイトのURLにマッチする正規表現。 location.href.matchで、対象かどうかを判別している。

  • ドットは「\.」
  • 1文字の任意の文字は「.」
  • 任意の長さの任意の文字は「.+」(注意:「*」ではありません。「www.example.com/foo/*」ではなく「www\.example\.com/foo/.+」です)
  • alphabet,number,underscoreの繰り返しは「\w+」。[A-Za-z0-9_]+ と同等
  • 数字の繰り返しは「\d+」
  • www.example.jpかexample.jpのどっちでも良い場合は「(?:www\.)?example\.jp」
  • hoge(?!fuge)で、hogeに続いてfugeが現れない場合にのみマッチ。例:「www\.example\.com/(?!setting)」
nextList

次のページへのリンクをXPathで指定。取得したリンクから次のページを読み込む。

insertBefore

読み込んだページから切り出したノード群を挿入する際に基準となるノードをXPathで指定。 insertBeforeのと言う名の通り、基準となるノードの前に挿入される。

ヒント:insertAfter相当が欲しいのならば、

*expression*/following-sibling::node() 

とすればよい。

pageElement

ページから切り出すノード群をXPathで指定。この指定によって取得されたノード群がinsertBeforeの要素の前に挿入される。

remainHeight (obsolete)

次のページを自動で読み込む際の基準を指定。 廃止。0.0.9より自動的に計算される。

tumblr の siteinfo はどうなっているか?

Tumblr (dashboard)

url:    http://www.tumblr.com/dashboard
nextLink:    //div[@id="pagination"]/a[last()]
insertBefore:    //div[@id="pagination"]
pageElement:    //ol[@id="posts"]

Tumblr

url:          http://[^.]+.tumblr.com/(page/\d+)?$
nextLink:     //div[@id="content" or @id="container"]/div[last()]/a[last()]
insertBefore: //div[@id="content" or @id="container"]/div[last()]
pageElement:  //div[@id="content" or @id="container"]/div[@class!="footer" or @class!="navigation"]

オレにも出来そうなので、やってみた

ブックマークレットなので起動してみた.ページをクリックして要素を選ぶだけ.なんだ簡単じゃん.

### Tumblr
<textarea class="autopagerize_data" readonly="readonly">
url:    http://www.tumblr.com/show/everything/by/me
nextLink:    //div[@id="pagination"]/a[@class="blue_button"]
insertBefore:    //div[@id="pagination"]
pageElement:    //ol[@id="posts"]
</textarea>

urlの正規化がわからんけど、"*"がワイルドカードだろっ、ってことで.以下をautopagerize.user.jsに書き写してみた.

{
url:    'http://www.tumblr.com/show/*',
nextLink:    '//div[@id="pagination"]/a[@class="blue_button"]',
insertBefore:    '//div[@id="pagination"]',
pageElement:    '//ol[@id="posts"]',
}

だめだ、3ページから先が表示されん!

Tumblr ver.3 のAutoPagerize用SITEINFO

ver.3になったときにdashboardautopagerizeが効かなくなったときに野良siteinfoが出回ってたなぁとおもいググル.

,{
url: 'http://www.tumblr.com/dashboard*',
nextLink: '//div[@id="pagination"]/a[@title="Go to older posts"]',
insertBefore: '//div[@id="pagination"]',
pageElement: '//ol[@id="posts"]',
},

なんか微妙に違うのだ.nextLinkが.よくわからんがコレを当ててみる.

訂正版だよ

訂正というよりは、上のやつのurlを変更してみるだけだ.

{
url:    'http://www.tumblr.com/show/*',
nextLink:    '//div[@id="pagination"]/a[@title="Go to older posts"]',
insertBefore:    '//div[@id="pagination"]',
pageElement:    '//ol[@id="posts"]',
}

って、これを autopagerize.user.js のSITEINFOに貼り付けてみたよ.おおっ、動いたぜ.ラッキー.

で、firebugってなんなんだろう?

そんなわけでAutoPagerizeのSITEINFO記述を楽にするためのブックマークレットを作りました。まだ単体ではきれいなXPathを作れませんがfirebugと組み合わせると、ゼロから書くよりかなり楽ができます。

どういうこと?

nextLinkが '//div[@id="pagination"]/a[@class="blue_button"]', だと3ページ目でアウト '//div[@id="pagination"]/a[@title="Go to older posts"]',でその先まで行けたの

どうしてなの?ってきいたら.

元のHTMLソース見てないからわからんけど、たぶんclassが"blue_button"になってるのは次ページのリンクだけじゃなく、例えば前ページに戻るリンクとかにも使われているんじゃないだろうか。

ということで、確認してみたよ./show/everything/by/me の2ページ目で、

<div id="pagination">
                    
            <a href="/show/everything/by/me/1" class="blue_button"
            style="margin-right:10px;"    
            title="Go to newer posts">&#8592; newer</a>
                
                    <a href="/show/everything/by/me/3" class="blue_button"
            title="Go to older posts">older &#8594;</a>
            </div>

ってなっていて、その通りでした.ありがとう!@tyoro
そういう理由で titleを指定してるんだな.
まだ、全然わかっていないけど.たのしいねっっ!

やっぱしそういういみだったんだね.

@taizooo やっぱりでしたか。 なので、たぶんclass指定だと次ページにたどりつけなかったのですねヽ|'◇'|ノ 2ページ目だけ表示できるのは、最初は戻るリンクがないからですね。

わかったよ.ウレシイ!