TwitterユーザーID取得
by
furyu-tei
2020-10-30 [2020/10/30 01:48:24]
Twitterユーザーのscreen_nameからユーザーIDを取得する
@@ -49,20 +49,24 @@
} )
.finally( () => {
let prompt_required = true;
-
- /*
- //try {
- // let target = window.getSelection().anchorNode.children[ 0 ];
- //
- // if ( target.tagName == 'INPUT' ) {
- // // TODO: value を書き換えただけではうまく反映されない
- // target.value = target.value.substring( 0, target.selectionStart ) + user_id + target.value.substring( target.selectionEnd );
- // prompt_required = false;
- // }
- //}
- //catch ( error ) {
- //}
- */
+
+ try {
+ let target = window.getSelection().anchorNode.children[ 0 ];
+
+ if ( target.tagName == 'INPUT' ) {
+ let event = new Event( 'input', { bubbles : true } ),
+ tracker = target._valueTracker,
+ new_value = target.value.substring( 0, target.selectionStart ) + user_id + target.value.substring( target.selectionEnd );
+
+ event.simulated = true;
+ if ( tracker ) tracker.setValue( new_value );
+ target.dispatchEvent( event );
+ prompt_required = false;
+ }
+ }
+ catch ( error ) {
+ }
+
if ( prompt_required ) prompt( 'User ID of ' + screen_name, user_id );
} );
} )
/*
* @title TwitterユーザーID取得
* @description Twitterユーザーのscreen_nameからユーザーIDを取得する
* @include https://twitter.com/*
* @license MIT License
* @require
* @javascript_url
*/
( () => {
'use strict';
let screen_name = window.getSelection().toString() || prompt( 'Input screen name of user', '' );
if ( screen_name === null ) return;
screen_name = screen_name.trim().replace( /^@/, '' );
if ( ! screen_name ) return;
fetch( 'https://api.twitter.com/1.1/users/show.json?screen_name=' + encodeURIComponent( screen_name ), {
method: 'GET',
headers: {
'authorization' : 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
'x-csrf-token' : document.cookie.match( /ct0=(.*?)(?:;|$)/ )[ 1 ],
'x-twitter-active-user' : 'yes',
'x-twitter-auth-type' : 'OAuth2Session',
'x-twitter-client-language' : 'en',
},
mode: 'cors',
credentials : 'include',
} )
.then( response => {
if ( ! response.ok ) {
throw new Error( 'Network response was not ok' );
}
return response.json()
} )
.then( user_info => {
let user_id = user_info.id_str;
if ( ! user_id ) {
throw new Error( 'Response does not include the ID of the user' );
}
navigator.clipboard.writeText( user_id )
.then( () => {
} )
.catch( error => {
console.error( 'Copy result to clipboard failure:', error );
} )
.finally( () => {
let prompt_required = true;
try {
let target = window.getSelection().anchorNode.children[ 0 ];
if ( target.tagName == 'INPUT' ) {
let event = new Event( 'input', { bubbles : true } ),
tracker = target._valueTracker,
new_value = target.value.substring( 0, target.selectionStart ) + user_id + target.value.substring( target.selectionEnd );
event.simulated = true;
if ( tracker ) tracker.setValue( new_value );
target.dispatchEvent( event );
prompt_required = false;
}
}
catch ( error ) {
}
if ( prompt_required ) prompt( 'User ID of ' + screen_name, user_id );
} );
} )
.catch( error => {
console.error( screen_name, error );
alert( '"' + screen_name + '" is not found: ' + error );
} );
} )();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。