From 22ff5bda71bffa0ccd200f10811a8b18304f86ef Mon Sep 17 00:00:00 2001 From: Heath Raftery Date: Sun, 20 Nov 2022 09:08:22 +1100 Subject: [PATCH] Add Poll Tweets functionality See README changes for a description of the new functionality. The implementation is at the "get it working stage", not at the "get it right" stage. I'm also not a Typescript developer and have definitely committed some code violations. But it's powerful functionality and I'd like to get it out there early. Known issues: - Keys from https://ttm.kbravh.dev are not supported so you need a Twitter Developer bearer token. Which was actually a piece of cake when I tried it. - If settings like "noteLocation" or "pollFilename" are empty, strange things will happen. Defaults are not enforced. - An error like "images failed to download" sometimes appears. But images seem to be downloading. More investigation necessary. - There is very little feedback on progress to the user. This is challenging to do well. - The process cannot be interrupted (or monitored, easily), so mistakes can result in a lot of downloaded tweets! - Every Tweet duplicates a lot of front matter. On reflection, this is still better than any alternative I could think of. - Speaking of, the "fetch new tweets" functionality relies on frontmatter being present and will quietly download all tweets again if it is not there. - There is now a lot of code repetition. This is so my additions are well contained, rather than modifying too much existing code at this stage. - Testing, and tests, are basically non-existent at this stage. --- README.md | 19 ++++ images/poll-tweets-screenshot.png | Bin 0 -> 122505 bytes main.ts | 24 +++++ src/pollManager.ts | 150 ++++++++++++++++++++++++++ src/settings.ts | 84 ++++++++++++++- src/types/tweet.ts | 25 +++++ src/util.ts | 173 ++++++++++++++++++++++++++++++ 7 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 images/poll-tweets-screenshot.png create mode 100644 src/pollManager.ts diff --git a/README.md b/README.md index 66caa41..06a51d7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ +## About This Fork + +This project is a small fork of the excellent [Obsidian Tweet to Markdown](https://github.com/kbravh/obsidian-tweet-to-markdown) project. This fork adds **Poll Tweets** functionality to automatically fetch new tweets from a Twitter timeline and add them to your Obsidian vault. + +The feature can be found at bottom of the existing plugin settings, under the "Additional Settings for Polling Tweets" heading. Enabling polling will periodically check for new tweets from the Twitter handles specified, and prepend them in reverse chronological order (just like appears in the normal Twitter user timeline) to a Markdown file named using the pattern specified. If the file does not exist, it will be created and *all* tweets added (up to the API limit which is 3200 at the time of writing). + +

+ Logo +

+ +**Note:** the current implementation is alpha "just-working" stage. It may not work with settings other than the defaults, errors may not be reported effectively and the code is rough. Improvements welcome! + +The README from the original project appears below. Please do not bug the original author with issues associated with the **Poll Tweets** feature in this fork. + +--- + +## Original Readme + +

diff --git a/images/poll-tweets-screenshot.png b/images/poll-tweets-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2ba5346a78a703c33739b92effe90a98bca177 GIT binary patch literal 122505 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 ~V6CNN%?o<5z$Z48-Tt9Jw2HS^Y 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 E1#WyZ^Z)<= literal 0 HcmV?d00001 diff --git a/main.ts b/main.ts index 9e647ae..fec2f2b 100644 --- a/main.ts +++ b/main.ts @@ -4,6 +4,7 @@ import {pasteTweet} from 'src/util' import {Tweet} from 'src/types/tweet' import {TweetCompleteModal} from 'src/TweetCompleteModal' import {TweetUrlModal} from 'src/TweetUrlModal' +import {createPollManager, PollManager} from 'src/pollManager' interface PasteFunction { (this: Plugin, ev: ClipboardEvent): void @@ -16,6 +17,8 @@ export default class TTM extends Plugin { bearerToken: string tweetComplete: TweetCompleteModal pasteFunction: PasteFunction + pollManager: PollManager + pollIntervalID: number //should be ReturnType but that seems to return the wrong type async onload(): Promise { console.info('Loading Tweet to Markdown') @@ -71,6 +74,8 @@ export default class TTM extends Plugin { }) this.addSettingTab(new TTMSettingTab(this.app, this)) + + this.pollManager = createPollManager(this.app, this) } onunload(): void { @@ -83,5 +88,24 @@ export default class TTM extends Plugin { async saveSettings(): Promise { await this.saveData(this.settings) + + if(this.settings.pollEnabled) { + if(this.pollIntervalID) + clearInterval(this.pollIntervalID) //registerInterval will still try to cancel it when unloading, but so be it. + + this.pollManager.pollRun(); + + var numHours = 24 //by default + switch(this.settings.pollFrequency) { + case 'monthly': { numHours = 24*30 } + case 'weekly': { numHours = 24*7 } + case 'twoDaily': { numHours = 24*2 } + case 'daily': { numHours = 24*1 } + case 'twiceDaily': { numHours = 24/2 } + case 'hourly': { numHours = 1 } + } + this.pollIntervalID = window.setInterval(() => this.pollManager.pollRun(), 1000*60*60*numHours) + this.registerInterval(this.pollIntervalID) + } } } diff --git a/src/pollManager.ts b/src/pollManager.ts new file mode 100644 index 0000000..47c542e --- /dev/null +++ b/src/pollManager.ts @@ -0,0 +1,150 @@ +import {App, Notice, TFile, parseFrontMatterEntry} from 'obsidian' +import TTM from 'main' +import {createDownloadManager, DownloadManager} from './downloadManager' +import {buildMarkdown, getBearerToken, getUser, getTimeline} from './util' +import {createFilename, doesFileExist, sanitizeFilename} from './util' +import type {Tweet, User} from './types/tweet' +import { TweetCompleteActions } from './types/plugin' + + +export const createPollManager = (app: App, plugin: TTM): PollManager => { + const pollRun = (): void => { + if (!navigator.onLine) { + new Notice('Polling for new tweets skipped because you appear to be offline.') + return + } + + const bearerToken = getBearerToken(plugin) + if (!bearerToken) { + new Notice('Polling for new tweets skipped because bearer token was not found.') + return + } + + const handles:string[] = plugin.settings.pollHandles.replace(/\s|@/g, '').split(",") + var downloadManager = createDownloadManager() + plugin.bearerToken = bearerToken + + handles.forEach(async handle => { + + let user + try { + //Note the term for a "handle" in the Twitter API is "username" + user = await getUser(handle, bearerToken); + } catch (error) { + new Notice(error.message) + return + } + + //Hella hacky way to make use of the existing createFilename interface + const dummyTweet:Tweet = { + includes: {users: [user]}, + data: {id: "", text: "", created_at: "", author_id: "", + public_metrics: {retweet_count: 0, reply_count: 0, like_count: 0, quote_count: 0}} + } + + let fname = createFilename( + dummyTweet, + plugin.settings.pollFilename, + { locale: plugin.settings.dateLocale, format: plugin.settings.dateFormat }) + + const fpath = createFilename( + dummyTweet, + plugin.settings.noteLocation ? plugin.settings.noteLocation : "./", //fix broken location default + { locale: plugin.settings.dateLocale, format: plugin.settings.dateFormat }, + 'directory') + + if (!fname || !fpath) { + new Notice('Failed to create filepath for timeline.') + return + } + + if (! await app.vault.adapter.exists(fpath)) { + await app.vault.createFolder(fpath).catch(error => { + new Notice('Error creating tweet directory.') + console.error( + 'There was an error creating the tweet directory.', + error + ) + return + }) + } + + //Seems getAbstractFileByPath doesn't handle "./" path. Strip it out if necessary here. + let abstractFile = app.vault.getAbstractFileByPath(fpath == "./" ? fname : `${fpath}/${fname}`) + let file: TFile + let since: Date + if(abstractFile && abstractFile instanceof TFile) { + file = abstractFile + if(file) + { + let metadata = app.metadataCache.getFileCache(file) + //If the parse fails, date will be the unix epoch, which is as good as undefined. + since = new Date(parseFrontMatterEntry(metadata.frontmatter, "fetched")) + } + } + + let tweets: Tweet[] + new Notice(`Polling for new Tweets from ${handle}...`) + + try { + tweets = await getTimeline(user.id, since, bearerToken) + } catch (error) { + new Notice(error.message) + return + } + + plugin.tweetMarkdown = '' + + const markdowns = await Promise.all( + tweets.map(async tweet => { + let markdown + try { + markdown = await buildMarkdown(app, plugin, downloadManager, tweet, 'normal', null) + } catch (error) { + new Notice('There was a problem processing the downloaded tweet') + console.error(error) + } + return markdown + }) + ) + + if(markdowns && markdowns.length > 0) { + plugin.tweetMarkdown = markdowns.join('\n\n---\n\n') + + await downloadManager + .finishDownloads() + .catch(error => { + new Notice('There was an error downloading the images.') + console.error(error) + }) + + // clean up excessive newlines + plugin.tweetMarkdown = plugin.tweetMarkdown.replace(/\n{2,}/g, '\n\n') + + // write the note to file + if(file) + { + var t = await app.vault.read(file) + app.vault.modify(file, [plugin.tweetMarkdown, t].join('\n\n---\n\n')) + new Notice(`${fname} updated.`) + } + else + { + const newFile = await app.vault.create(`${fpath}/${fname}`, plugin.tweetMarkdown) + new Notice(`${fname} created.`) + } + } + }) + + // clean up + plugin.tweetMarkdown = '' + } + + return { + pollRun, + } as PollManager +} + +export interface PollManager { + pollRun: () => void +} diff --git a/src/settings.ts b/src/settings.ts index 17021e4..6ef6fbe 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,7 +1,8 @@ -import {App, moment, Platform, PluginSettingTab, Setting} from 'obsidian' +import {App, moment, Platform, PluginSettingTab, Setting, ToggleComponent} from 'obsidian' import {TweetCompleteAction, TweetCompleteActions} from './types/plugin' import {FolderSuggest} from './suggester/folderSuggester' import TTM from 'main' +import { exists } from 'fs' export interface TTMSettings { bearerToken: string | null @@ -29,6 +30,10 @@ export interface TTMSettings { includeDate: boolean dateFormat: string dateLocale: string + pollEnabled: boolean + pollHandles: string + pollFilename: string + pollFrequency: 'monthly' | 'weekly' | 'twoDaily' | 'daily' | 'twiceDaily' | 'hourly' } export const DEFAULT_SETTINGS: TTMSettings = { @@ -56,6 +61,10 @@ export const DEFAULT_SETTINGS: TTMSettings = { includeDate: true, dateFormat: 'LLL', dateLocale: 'en', + pollEnabled: false, + pollHandles: '', + pollFilename: 'Twitter timeline - [[handle]]', //Unfortunately, seems to displace the placeholder but how else do you set a default? + pollFrequency: 'daily' } export class TTMSettingTab extends PluginSettingTab { @@ -63,6 +72,7 @@ export class TTMSettingTab extends PluginSettingTab { locales = moment .locales() .reduce((obj, locale) => ({...obj, [locale]: locale}), {}) + pollEnableToggle: ToggleComponent constructor(app: App, plugin: TTM) { super(app, plugin) @@ -405,5 +415,77 @@ export class TTMSettingTab extends PluginSettingTab { await this.plugin.saveSettings() }) ) + + containerEl.createEl('h2', {text: 'Additional Settings for Polling Tweets'}) + + new Setting(containerEl) + .setName('Polling enabled') + .setDesc( + 'Periodically poll for new tweets.' + ) + .addToggle(toggle => { + toggle + .setValue(this.plugin.settings.pollEnabled) + .onChange(async value => { + this.plugin.settings.pollEnabled = value + await this.plugin.saveSettings() + }) + this.pollEnableToggle = toggle + }) + + new Setting(containerEl) + .setName('Twitter handles to poll') + .setDesc( + 'Handles (with or without @ prefix) to poll for new tweets, separated by commas.' + ) + .addText(text => + text + .setPlaceholder('@handle1,@handle2') + .setValue(this.plugin.settings.pollHandles) + .onChange(async value => { + this.plugin.settings.pollHandles = value + this.pollEnableToggle.setValue(false) + await this.plugin.saveSettings() + }) + ) + + new Setting(containerEl) + .setName('Filename to update with new tweets') + .setDesc( + 'The name of the files to add new tweets to. Files are created if they don\'t exist. You can use the placeholders [[handle]], [[name]], [[text]] and [[id]]. Defaults to "Twitter timeline - [[handle]]"' + ) + .addText(text => + text + .setPlaceholder('Twitter timeline - [[handle]]') + .setValue(this.plugin.settings.pollFilename) + .onChange(async value => { + this.plugin.settings.pollFilename = value + this.pollEnableToggle.setValue(false) + await this.plugin.saveSettings() + }) + ) + + new Setting(containerEl) + .setName('Poll frequency') + .setDesc( + 'How often to poll for new tweets.' + ) + .addDropdown(dropdown => + dropdown + .addOptions({ + monthly: 'Monthly', + weekly: 'Weekly', + twoDaily: 'Every second day', + daily: 'Every day', + twiceDaily: 'Twice daily', + hourly: 'Hourly' + }) + .setValue(this.plugin.settings.pollFrequency) + .onChange(async (value: 'monthly' | 'weekly' | 'twoDaily' | 'daily' | 'twiceDaily' | 'hourly' ) => { + this.plugin.settings.pollFrequency = value + this.pollEnableToggle.setValue(false) + await this.plugin.saveSettings() + }) + ) } } diff --git a/src/types/tweet.ts b/src/types/tweet.ts index 6a6e816..20f726d 100644 --- a/src/types/tweet.ts +++ b/src/types/tweet.ts @@ -119,3 +119,28 @@ export interface User { username: string profile_image_url: string } + +export interface UserResponse { + data: User + errors?: Error[] + // other error fields + reason?: string + status?: number +} + +export interface Meta { + result_count: number + newest_id: string + oldest_id: string + next_token?: string +} + +export interface Tweets { + includes: Includes + data: Data[] + meta: Meta + errors?: Error[] + // other error fields + reason?: string + status?: number +} diff --git a/src/util.ts b/src/util.ts index 2f86684..3eaecb7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -19,6 +19,8 @@ import type { Tweet, TweetURL, User, + UserResponse, + Tweets, } from './types/tweet' import {decode} from 'html-entities' import {moment} from 'obsidian' @@ -849,3 +851,174 @@ export const getBearerToken = (plugin: TTM): string => { export const tweetStateCleanup = (plugin: TTM): void => { plugin.tweetMarkdown = '' } + + +export const getUser = async (username: string, bearer: string): Promise => { + if (bearer.startsWith('TTM')) { + return getUserFromTTM(username, bearer) + } + return getUserFromTwitter(username, bearer) +} + +/** + * Fetches a user object from the Twitter v2 API + * @param {string} username - The username of the user to fetch from the API + * @param {string} bearer - The bearer token + * @returns {User} - The user from the Twitter API + */ +const getUserFromTwitter = async ( + username: string, + bearer: string +): Promise => { + const twitterUrl = new URL(`https://api.twitter.com/2/users/by/username/${username}`) + const params = new URLSearchParams({ + 'user.fields': 'name,username,profile_image_url', + }) + + let userRequest + try { + userRequest = await request({ + method: 'GET', + url: `${twitterUrl.href}?${params.toString()}`, + headers: {Authorization: `Bearer ${bearer}`}, + }) + } catch (error) { + if (error.request) { + throw new Error('There seems to be a connection issue.') + } else { + console.error(error) + throw error + } + } + const userResponse: UserResponse = JSON.parse(userRequest) + if (userResponse.errors) { + throw new Error(userResponse.errors[0].detail) + } + if (userResponse?.status === 401) { + throw new Error('There seems to be a problem with your bearer token.') + } + if (userResponse?.reason) { + switch (userResponse.reason) { + case 'client-not-enrolled': + default: + throw new Error('There seems to be a problem with your bearer token.') + } + } + return userResponse.data +} + +/** + * Fetches a user object from the TTM service API + * @param {string} username - The username of the user to fetch from the API + * @param {string} bearer - The bearer token + * @returns {Promise} - The user from the Twitter API + */ +const getUserFromTTM = async (username: string, bearer: string): Promise => { + throw new Error('Fetching users from the TTM service API not currently supported.') + + return undefined +} + +export const getTimeline = async (userId: string, since: Date, bearer: string): Promise => { + if (bearer.startsWith('TTM')) { + return getTimelineFromTTM(userId, since, bearer) + } + return getTimelineFromTwitter(userId, since, bearer) +} + +/** + * Fetches a user's tweet timeline as an array of tweets in reverse chronological order from the Twitter v2 API + * @param {string} userId - The userId of the timeline to fetch from the API + * @param {Date} since - Fetch all tweets after this date. Pass "undefined" to fetch all tweets. + * @param {string} bearer - The bearer token + * @returns {Tweet[]} - The tweets from the Twitter API + */ +const getTimelineFromTwitter = async (userId: string, since: Date, bearer: string): Promise => { + const twitterUrl = new URL(`https://api.twitter.com/2/users/${userId}/tweets`) + const params = new URLSearchParams({ + expansions: 'author_id,attachments.poll_ids,attachments.media_keys', + 'user.fields': 'name,username,profile_image_url', + 'tweet.fields': + 'attachments,public_metrics,entities,conversation_id,referenced_tweets,created_at', + 'media.fields': 'url,alt_text', + 'poll.fields': 'options', + }) + + if(since) + params.set("start_time", since.toISOString()); + + var hasNextPage:boolean = true + var nextToken:string = undefined + var ret:Tweet[] = [] + + while (hasNextPage) { + + let tweetsRequest + try { + if(nextToken) { + params.set("pagination_token", nextToken) + } + + tweetsRequest = await request({ + method: 'GET', + url: `${twitterUrl.href}?${params.toString()}`, + headers: {Authorization: `Bearer ${bearer}`}, + }) + } catch (error) { + if (error.request) { + throw new Error('There seems to be a connection issue.') + } else { + console.error(error) + throw error + } + } + const tweets: Tweets = JSON.parse(tweetsRequest) + if (tweets.errors) { + throw new Error(tweets.errors[0].detail) + } + if (tweets?.status === 401) { + throw new Error('There seems to be a problem with your bearer token.') + } + if (tweets?.reason) { + switch (tweets.reason) { + case 'client-not-enrolled': + default: + throw new Error('There seems to be a problem with your bearer token.') + } + } + + if(tweets.data) { + tweets.data.forEach(t => { + var media = tweets.includes.media && t.attachments && t.attachments.media_keys ? + tweets.includes.media.filter(m => t.attachments.media_keys.includes(m.media_key)) : + null + var polls = tweets.includes.polls && t.attachments && t.attachments.poll_ids ? + tweets.includes.polls.filter(p => t.attachments.poll_ids.includes(p.id)) : + null + ret.push({ + includes: {users: tweets.includes.users, media: media, polls: polls}, + data: t + }) + }) + } + + if (tweets.meta.next_token) { + nextToken = tweets.meta.next_token; + } else { + hasNextPage = false; + } + } + + return ret +} + +/** + * Fetches a user object from the TTM service API + * @param {string} userId - The userId of the timeline to fetch from the API + * @param {Date} since - Fetch all tweets after this date. Pass "undefined" to fetch all tweets. + * @param {string} bearer - The bearer token + * @returns {Promise} - The user from the Twitter API + */ +const getTimelineFromTTM = async (userId: string, since: Date, bearer: string): Promise => { + throw new Error('Fetching users from the TTM service API not currently supported.') +}