diff options
author | Mark Powers <markppowers0@gmail.com> | 2020-11-21 17:56:53 -0600 |
---|---|---|
committer | Mark Powers <markppowers0@gmail.com> | 2020-11-21 17:56:53 -0600 |
commit | f11f68adebf45123adbd0b9889bd40349ef4e7a0 (patch) | |
tree | ff6b0b44dc1accc76f2dd19913da34969118bd86 /cs.js |
Initial commit
Diffstat (limited to 'cs.js')
-rw-r--r-- | cs.js | 89 |
1 files changed, 89 insertions, 0 deletions
@@ -0,0 +1,89 @@ +let base_url = "https://rb.marks.kitchen" +let formats = ["Atom", "Mrss", "Html"] +let types = { + 'application/rss+xml': "rss", + 'application/atom+xml': "atom", + 'application/rdf+xml': "rdf", + 'application/rss': "rss", + 'application/atom': "atom", + 'application/rdf': "rdf", + 'text/rss+xml': "rss", + 'text/atom+xml': "atom", + 'text/rdf+xml': "rdf", + 'text/rss': "rss", + 'text/atom': "atom", + 'text/rdf': "rdf" +} + +function normalize_feed_url(feed_url) { + if (feed_url.startsWith('/')) { + let url = window.location.href + feed_url = url.split('/')[0] + '//' + url.split('/')[2] + feed_url; + } + return feed_url +} + +function find_links_in_page() { + let links = document.querySelectorAll('link[type]'); + let feeds = []; + for (let i = 0; i < links.length; i++) { + if (links[i].hasAttribute('type') && links[i].getAttribute('type') in types) { + let title = links[i].getAttribute('title') + let feed_url = normalize_feed_url(links[i].getAttribute('href')); + let type = types[links[i].getAttribute('type')] + let feed = { + type: `native: ${title || type}`, + url: feed_url, + }; + feeds.push(feed); + } + } + return feeds +} + +function get_all_types(feed_url) { + let feeds = []; + formats.forEach(el => { + feeds.push({ + type: `rss-bridge: ${el}`, + url: feed_url + el + }); + }) + return feeds; +} + +async function get_insta(url) { + let insta_url = url + "?__a=1" + console.log("fetching") + let res = await fetch(insta_url); + let json = await res.json(); + let uid = json.graphql.user.id + let feed_url = `${base_url}/?action=display&bridge=Instagram&context=Username&u=${uid}&media_type=all&format=`; + return get_all_types(feed_url) +} + +function get_twitter(url) { + let pattern = /twitter.com\/(\w+).*/ + let match = url.match(pattern); + let twitter_handle = match[1] + let feed_url = `${base_url}/?action=display&bridge=Twitter&context=By+username&u=${twitter_handle}&format=` + return get_all_types(feed_url) +} + + +async function get_feed_urls() { + let all_feed_urls = [] + let url = window.location.href; + //url = url.toLowerCase() + if (url.includes("instagram")) { + all_feed_urls = all_feed_urls.concat(await get_insta(url)) + } else if (url.includes("twitter")) { + all_feed_urls = all_feed_urls.concat(get_twitter(url)) + } + all_feed_urls = all_feed_urls.concat(find_links_in_page()) + return all_feed_urls +} + +browser.runtime.onMessage.addListener(function (msg, sender) { + return Promise.resolve(get_feed_urls()); +}) |