ニコニコミュニティの新着レスチェックをするGreasemonkeyスクリプトがうまく動かない
ニコニコミュニティで,参加しているコミュニティ一覧画面から新着レスのついたコミュニティが分からないのは不便だなーと思ったので,新着レスをチェックするぐりもんを書いているのですが,うまく動かない。というか認証に失敗するっぽい。
http://dic.nicovideo.jp/b/c/coxxxのアドレスに直接リクエストを送ると,コミュニティトップ(http://com.nicovideo.jp/community/coxxx)に強制的に戻される。
http://com.nicovideo.jp/community/coxxx内には,
<iframe src="http://dic.nicovideo.jp/b/c/coxxx?hash_key=..." width="632" height="128" id="community-bbs"></iframe>
こんなかたちでhash_keyを付与したURLが埋め込まれているので,そのURLにアクセスしてみた。
function getURL(url, callback, headers) { GM_xmlhttpRequest({ method: 'GET', headers: headers || { 'User-Agent': 'Mozilla/5.0 Greasemonkey' }, url: url, onload: function(response) { callback(response); }, onerror: function() { callback(undefined); } }); } function getResNum(com_id, callback) { var iframe_regexp = new RegExp('<iframe src="(http://dic\\.nicovideo\\.jp/b/c/' + com_id + '\?[^"]+)" '); getURL('http://com.nicovideo.jp/community/' + com_id, function(response) { var [, url] = response.responseText.match(iframe_regexp); getURL(url, function(callback) { unsafeWindow.console.log(com_id, url, response.finalUrl, response.responseText.match(/<title>.+<\/title>/)); }); }); }
こんな感じで。
だが駄目だった。クッキーは与えたし。あとはなんの情報を付与すればいいのだろうか。
アドレスを直に打っていけるからリファラは関係無いんだよな…
21:03 追記
解決しました。ソースだけ置いておきます。
function getResNum(com_id, callback) { var iframe_regexp = new RegExp('<iframe src="http://dic\\.nicovideo\\.jp/b/c/' + com_id + '\\?([^"]+)" '); getURL('http://com.nicovideo.jp/community/' + com_id, function(response) { var [, hash_key] = response.responseText.match(iframe_regexp); getURL('http://dic.nicovideo.jp/b/c/' + com_id, function(response) { unsafeWindow.console.log('--', com_id, response.finalUrl, response.responseText.match(/<title>.+<\/title>/)); }, {'Cookie': hash_key}); }); }
22:41 追記
完成した→ニコニコミュニティの掲示板の新着レスをチェックするGreasemonkeyスクリプト(完成) - なんとなく目記