=A!
by
noromanba
2018-01-21 [2018/01/21 04:18:00]
(Forked from
A! by
noromanba)
Hatena Antenna force bulk checker
@@ -10,7 +10,7 @@
// TODO
// - try-catch
-// - server safe, avoid (D)DoS
+// - server safe interval, avoid (D)DoS
// login required
(() => {
@@ -19,11 +19,14 @@
document.body.querySelectorAll([
'a[href^="./editpage?cid="]',
]).forEach(async content => {
- const edit = await window.fetch(content.href, {
- // use cookie
+ const headers = new Headers();
+ headers.set('Content-Type', 'text/html;charset=euc-jp');
+
+ const edit = await fetch(content.href, {
+ // needs cookie
credentials: 'same-origin',
// XXX ignoring charset
- headers: new Headers().set('Content-Type', 'text/html;charset=euc-jp'),
+ headers,
});
const txt = await edit.text();
// TBD DOMParser()
@@ -38,7 +41,7 @@
checker.searchParams.set('url', url);
// working?
- await window.fetch(checker.href, {
+ await fetch(checker.href, {
credentials: 'same-origin',
});
});
/*
* @title =A!
* @description Hatena Antenna force bulk checker
* @include http://a.hatena.ne.jp/HATENA_ID/checklist
* @contributor noromanba http://let.hatelabo.jp/noromanba/let/hLHUksLx6YMy
* @license MIT License https://opensource.org/licenses/MIT
* @javascript_url
* @private waiting review
*/
// TODO
// - try-catch
// - server safe interval, avoid (D)DoS
// login required
(() => {
'use strict';
document.body.querySelectorAll([
'a[href^="./editpage?cid="]',
]).forEach(async content => {
const headers = new Headers();
headers.set('Content-Type', 'text/html;charset=euc-jp');
const edit = await fetch(content.href, {
// needs cookie
credentials: 'same-origin',
// XXX ignoring charset
headers,
});
const txt = await edit.text();
// TBD DOMParser()
const url = (txt.match(/^<td><a href="(https?[^"]+)"\s+target="_blank"/m) || [])[1];
if (!url) return;
// manual checker syntax;
// http://a.hatena.ne.jp/check?url=<ENCODED_URL>[&robots=1]
// min interval: 5min c.f.
// http://a.hatena.ne.jp/check?url=
const checker = new URL('http://a.hatena.ne.jp/check');
checker.searchParams.set('url', url);
// working?
await fetch(checker.href, {
credentials: 'same-origin',
});
});
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。