Last active
September 4, 2020 19:29
-
-
Save silver-mixer/ba6f5fb1e1eda9822988a56e2c9dceca to your computer and use it in GitHub Desktop.
[UserScript] Extract and display user unique id in twitter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
// ==UserScript== | |
// @name Twitter User ID Extractor | |
// @version 4 | |
// @description ユーザの固有IDを抽出します。 | |
// @author silver-mixer | |
// @match https://twitter.com/* | |
// @grant none | |
// ==/UserScript== | |
try{ | |
const USE_SCREEN_NAME = true; | |
const WATCH_INTERVAL = 500; | |
let lastPage = null; | |
let success = false; | |
let getScreenName = () => { | |
let scrname = null; | |
try{ | |
let spans = document.getElementsByTagName('nav')[1].previousSibling.children[1].children[1].querySelectorAll('span'); | |
for(let i = spans.length - 1; i > 0; i--){ | |
if(spans[i].innerText.indexOf('@') === 0)scrname = spans[i].innerText; | |
} | |
}catch(e){} | |
return scrname; | |
}; | |
let getDisplayName = () => { | |
let display = null; | |
try{ | |
let spans = document.getElementsByTagName('nav')[1].previousSibling.children[1].children[1].querySelectorAll('span'); | |
display = spans[0].innerText; | |
}catch(e){} | |
return display; | |
}; | |
let addUidProfile = uid => { | |
let name = location.href.match(/https:\/\/twitter\.com\/([a-zA-Z0-9_]+)/)[1]; | |
let spans = document.getElementsByTagName('span'); | |
let navs = document.getElementsByTagName('nav'); | |
if(navs.length > 1 && navs[1].previousSibling && navs[1].previousSibling.lastChild && document.getElementsByTagName('span')[8]){ | |
let aElem = document.createElement('a'); | |
aElem.href = 'https://twitter.com/intent/user?user_id=' + uid; | |
if(USE_SCREEN_NAME){ | |
aElem.innerText = (getScreenName() !== null ? getScreenName() : name) + ' (' + uid + ')'; | |
}else{ | |
let display = (getDisplayName() !== null ? getDisplayName() : name); | |
aElem.innerText = display + '(' + uid + ')'; | |
} | |
aElem.id = '_tuie_a'; | |
navs[1].previousSibling.lastChild.appendChild(aElem); | |
return true; | |
} | |
return false; | |
}; | |
setInterval(() => { | |
let page = location.href.match(/https:\/\/twitter\.com\/([a-zA-Z0-9_]+)/)[1]; | |
let followSpan = Array.prototype.find.call(document.getElementsByTagName('span'), elem => elem.innerHTML === 'フォロー中' || elem.innerHTML === 'フォロー'); | |
if(page !== lastPage){ | |
if(document.getElementById('_tuie_a')){ | |
document.getElementById('_tuie_a').remove(); | |
} | |
success = false; | |
} | |
if(followSpan && | |
followSpan.parentNode && | |
followSpan.parentNode.parentNode && | |
followSpan.parentNode.parentNode.parentNode){ | |
let rawUid = followSpan.parentNode.parentNode.parentNode.dataset.testid; | |
if(rawUid && rawUid.match(/[0-9]+/) !== null){ | |
let uid = rawUid.match(/[0-9]+/)[0]; | |
if(!success || document.getElementById('_tuie_a') === null){ | |
success = addUidProfile(uid); | |
} | |
} | |
} | |
lastPage = page; | |
}, WATCH_INTERVAL); | |
}catch(e){ | |
console.error('Error at Twitter User ID Extractor v4\n', e); | |
}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Twitter User ID Extractor
簡易バージョン履歴
v4 Tampermonkey向けにヘッダコメントを修正
v3 動作しないバグを修正
v2 現Twitter用に再作成
v1 旧Twitter用に作成(非公開)