twitter-helper
Version:
Allows to fetch data from Twitter without using its API. Does not require any authentication.
70 lines (55 loc) • 2.09 kB
JavaScript
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
factory();
}
}(this, function() {
const SCRIPT_IDENTIFIER = 'myBlockGetTweets';
const __removeGetTweetsByUsernameScript = () => {
const script = document.getElementById(SCRIPT_IDENTIFIER);
if (!script) {
return;
}
script.parentNode.removeChild(script);
};
const __createGetTweetsByUsernameScript = username => {
const script = document.createElement('script');
script.type = 'text/javascript';
script.id = SCRIPT_IDENTIFIER;
script.src = [
'https://syndication.twitter.com/timeline/profile?',
'callback=twitterHelper.getTweetsByUsernameCallback',
'&screen_name=', username
].join('');
return script;
};
const __getDataFromTweet = tweetNode => {
return {
username: tweetNode.querySelector('[data-scribe="element:name"]').innerHTML,
text: tweetNode.querySelector('.timeline-Tweet-text').innerHTML,
published: tweetNode.querySelector('.dt-updated').getAttribute('datetime')
};
};
const twitterHelper = {
getTweetsByUsername(username) {
__removeGetTweetsByUsernameScript();
document.body.appendChild(__createGetTweetsByUsernameScript(username));
},
getTweetsByUsernameCallback(data) {
const div = document.createElement('div');
div.innerHTML = data.body;
const tweetsData = [...div.querySelectorAll('.timeline-Tweet')].map(__getDataFromTweet);
const event = new CustomEvent('tweetsByUsernameFetched', {
detail: {tweetsData},
bubbles: true,
cancelable: true
});
document.body.dispatchEvent(event);
}
};
window.twitterHelper = twitterHelper;
return twitterHelper;
}));