[?]ががっとリストに追加
@@ -1,46 +1,45 @@
/*
- * @title [?]ログ 500件くらい保存
- * @description マストドンの自分のログを JSON で保存します。/web/* で実行してください。
+ * @title [?]ががっとリストに追加
+ * @description 特定のワードに引っかかる人をまとめてリストに追加します。追加したいリストを開いて実行してください。
* @include *
* @license MIT License
* @javascript_url
*/
-
-// @include https://*/web/* だけどユーザスクリプトとして実行するようなやつでもないのでそのまま
+
+// @include https://*/web/timelines/list/* くらい
void (async (
- d = document,
- // 40件ごとに二秒挟んでる
s = _ => new Promise(r => setTimeout(r, 2000)),
- m = JSON.parse(d.querySelector('#initial-state').textContent).meta,
- n = m ? 'https://' + location.host + '/api/v1/accounts/' + m.me + '/statuses?limit=40' : 0,
- // アクセストークン要らなかったかも、為念で
- a = m ? { headers: { Authorization: 'Bearer ' + m.access_token } } : {},
-/*
- u = location.href.match(/^(.+\/)web(\/accounts\/\d+)/),
- n = u ? (u[1] + 'api/v1' + u[2] + '/statuses?limit=40') : 0,
- t = JSON.parse(d.querySelector('#initial-state').textContent).meta.access_token,
- a = t ? { headers: { Authorization: 'Bearer ' + t } } : {},
-*/
+ m = JSON.parse(document.querySelector('#initial-state').textContent).meta,
+ v = 'https://' + location.host + '/api/v1/',
+ n = m ? v + 'accounts/' + m.me + '/following?limit=80' : 0,
+ a = m ? { headers: {
+ Authorization: 'Bearer ' + m.access_token,
+ Accept: 'application/json',
+ 'Content-Type': 'application/json'
+ } } : {},
+ h = location.href.match(/web\/timelines\/list\/(\d+)/),
+ t = h ? v + 'lists/' + h[1] + '/accounts' : 0,
l = [],
- p = prompt('取得の目安', '500'),
- h
+ p = prompt('検索語', '@mstdn.maud.io')
) => {
- while (n && l.length < p) {
+ while (n && t) {
await fetch(n, a).then(r => ((
n = (r.headers.has('Link') && (h = r.headers.get('Link').match(/<(.+?)>; rel="next"/))) ? h[1] : 0
), r.json())).then(j => (
- // 自分のアカウントデータ削ってる
- l = l.concat(j.map ? j.map(i => (delete i.account, i)) : [])
+ l = l.concat(j.filter ? j.filter(i => JSON.stringify(i).includes(p)) : [])
));
console.log(l.length, n);
await s();
}
- // リンクにするとファイル名指定できるけど今回やってない
- location.href = URL.createObjectURL(new Blob([JSON.stringify(l)], { type: 'application/octet-stream' }));
+ console.log(l.map(i => i.id));
-})();
+ await fetch(t, Object.assign(a, {
+ method: 'POST',
+ body: JSON.stringify({ account_ids: l.map(i => i.id) })
+ })).then(r => r.json()).then(j => console.log('リスト追加 : たぶん', typeof(j) == 'object')).catch(console.error);
+})();
/*
* @title [?]ががっとリストに追加
* @description 特定のワードに引っかかる人をまとめてリストに追加します。追加したいリストを開いて実行してください。
* @include *
* @license MIT License
* @javascript_url
*/
// @include https://*/web/timelines/list/* くらい
void (async (
s = _ => new Promise(r => setTimeout(r, 2000)),
m = JSON.parse(document.querySelector('#initial-state').textContent).meta,
v = 'https://' + location.host + '/api/v1/',
n = m ? v + 'accounts/' + m.me + '/following?limit=80' : 0,
a = m ? { headers: {
Authorization: 'Bearer ' + m.access_token,
Accept: 'application/json',
'Content-Type': 'application/json'
} } : {},
h = location.href.match(/web\/timelines\/list\/(\d+)/),
t = h ? v + 'lists/' + h[1] + '/accounts' : 0,
l = [],
p = prompt('検索語', '@mstdn.maud.io')
) => {
while (n && t) {
await fetch(n, a).then(r => ((
n = (r.headers.has('Link') && (h = r.headers.get('Link').match(/<(.+?)>; rel="next"/))) ? h[1] : 0
), r.json())).then(j => (
l = l.concat(j.filter ? j.filter(i => JSON.stringify(i).includes(p)) : [])
));
console.log(l.length, n);
await s();
}
console.log(l.map(i => i.id));
await fetch(t, Object.assign(a, {
method: 'POST',
body: JSON.stringify({ account_ids: l.map(i => i.id) })
})).then(r => r.json()).then(j => console.log('リスト追加 : たぶん', typeof(j) == 'object')).catch(console.error);
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。