Twitterユーザー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,
                        last_value = target.value,
                        new_value = last_value.substring( 0, target.selectionStart ) + user_id + last_value.substring( target.selectionEnd );
                    
                    target.value = new_value;
                    event.simulated = true;
                    if ( tracker ) tracker.setValue( last_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 です。

History

  1. 2020/10/30 01:48:24 - 2020-10-30
  2. 2020/10/30 01:42:17 - 2020-10-30
  3. 2020/10/30 01:40:12 - 2020-10-30
  4. 2020/10/29 17:34:00 - 2020-10-29
  5. 2020/10/29 17:06:47 - 2020-10-29
  6. 2020/10/29 15:53:56 - 2020-10-29
  7. 2020/10/29 15:09:30 - 2020-10-29
  8. 2020/10/29 15:02:09 - 2020-10-29