[🐘]ががっとリストに追加 Fork

    @@ -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 です。