/* A widget that displays your current Twitter posting streak, powered by your ilo.so dashboard. (Only works for ilo.so users!) You will need to put in your Twitter username and API key in the widget's Parameter field. Like this: "username:myapikey" You can get your API key from https://ilo.so/settings/ Sign up to ilo at https://ilo.so. Version 1.0.0 (January 20, 2022) by Dan Rowden (@dr) */ // Some colours you can change const chartColor = "#c88e69" const chartOpacity = 0.3 const widgetBgColor = "#fff7f2" const secondaryColor = '#6d6d6d' const primaryColor = '#1e272e' const highlightColor = '#b77a54' const warningColor = '#C51D17' // Fonts const smallText = new Font("HelveticaNeue", 14); const largeText = new Font("HelveticaNeue-Medium", 16); // ===================================================================== // Here starts all the widget code. Feel free to edit below if you want! // Share your widget on Twitter! I'm @dr :) // ===================================================================== let twitterParameter = args.widgetParameter.split(':') let twitterUsername = twitterParameter[0] let apiKey = twitterParameter[1] let url = "https://api.ilo.so/v1/streak/"+twitterUsername+"/?api_key="+apiKey let req = new Request(url) const json = await req.loadJSON() const yesterday_streak = parseInt(json['yesterday_streak']) const tweets_today = parseInt(json['tweets_today']) const current_streak = parseInt(json['current_streak']) const longest_streak = parseInt(json['longest_streak']) const streak = tweets_today == 0 ? yesterday_streak : current_streak // Create the widget let w = new ListWidget() w.backgroundColor = new Color(widgetBgColor); w.url = 'https://ilo.so/'+twitterUsername+'/' var refreshDate = Date.now() + 1000*60*5 // Refresh after at least 5 minutes w.refreshAfterDate = new Date(refreshDate) // ilo icon let icon = await loadImage('https://ilo.so/static/favicon.png') let iconImg = w.addImage(icon) iconImg.imageSize = new Size(20,20) w.addSpacer(16) // Show username const usernameStr = '@' + twitterUsername textUsername = w.addText(usernameStr) textUsername.textColor = new Color(secondaryColor); textUsername.font = smallText; w.addSpacer(4) // Show current follower count const currentStr = streak + " day streak" textStreak = w.addText(currentStr) textStreak.textColor = new Color(primaryColor); textStreak.font = largeText w.addSpacer(4) // Show today's tweet count let tweetsTodayStr = (tweets_today > 0 ? '+' : '') + tweets_today + " tweet" + ((tweets_today == 1) ? "" : "s") + " today" let tweetColor = highlightColor if (tweets_today == 0) { tweetColor = warningColor } textTweets = w.addText(tweetsTodayStr) textTweets.textColor = new Color(tweetColor); textTweets.font = smallText; w.addSpacer(4) // Show today's tweet count const longestStreakStr = "Longest: " + longest_streak + " days" textLongest = w.addText(longestStreakStr) textLongest.textColor = new Color(secondaryColor); textLongest.font = smallText; // Download an image from a given url async function loadImage(imgUrl) { const req = new Request(imgUrl) return await req.loadImage() } if (config.runsInWidget) { Script.setWidget(w) } else { await w.presentSmall() } if (config.runsWithSiri) { Speech.speak('Your current streak is '+streak+' days.') } Script.complete()