Tagged: Subhash TweetsToRSS

Subhash TweetsToRSS v2019.03.04 for Android, Linux, Mac and Windows

Mostly bug fixes.

  • The search form at the top of results page has been revamped and made more meaningful. You can specify the number of results per search.
  • The bug which causes the “older tweets” link in the footer to omit the location information has been fixed.
Search form of Subhash TweetsToRSS

Subhash TweetsToRSS search form is more meaningful.

JAR executable (Linux/Mac/Windows) and APK installer (for Android) available at:

Subhash TweetsToRSS v2019.02.04 for Android, Linux, Mac and Windows adds support animated GIFs and videos

A bug led to the discovery new capabilities.

EmailTweetor (desktop version) has the ability to post multiple images in one tweet. When checking this capability, I found to my dismay that TweetsToRSS was displaying only the last image in any tweet. Instead of += in the for loop, I had been using just =, which made the previous image details to be overwritten. I further explored the API and discovered support for animated GIFs and videos. So, the changes are:

  • Support for animated GIF images and videos.
  • Fix for bug which caused only the last image in a tweet to be displayed.
  • Fix for the bug (in Android) causing the locations.html file was displayed as raw HTML.
  • Fix for the following error, which caused the whole request to be cancelled if just one tweet in the list sent by Twitter generated it:

    404:The URI requested is invalid or the resource requested, such as a user, does not exists. Also returned when the requested format is not supported by the requested method. message – No status found with that ID. code – 144

Support for animated GIFs and videos in Subhash TweetsToRSS

Subhash TweetsToRSS now displays multiples images and any GIF animations or video found in a tweet.

A news report playing as a video from a Twitter account

Subhash TweetsToRSS v2019.01.11 for Android fixes bugs in Twitter authorization

Some bugs had crept in after I made possible to use the Twit.bin file from the desktop version. The empty space below the buttons has been replaced with a simple introduction to the app. The Twitter authentication screen temporarily saves the URL to clipboard so that the PIN can be generated outside the app (in a browser of choice).


Subhash TweetsToRSS v2018.12.05 for Linux/Mac/Windows – faster processing of permanent offline images

I use TweetsToRSS to archive tweets in an email client. To ensure that I have access to all images even if an account is closed or a tweet is deleted by the account holder, I use the permanent offline images option.

The permanent offline image uses text encoding of the image and this is very time consuming. The original logic was also inefficient. It would download an image and encode it and then proceed to the next image. As a result, RSS readers took several minutes to receive a response to a feed request. My email client would timeout the connection to TweetsToRSS and failed to update my Twitter RSS feeds.

In this update, TweetsToRSS downloads and encodes all images (including profile pictures) simultaneously in background threads. This improves the response times to the requests from email client and the RSS feeds get update without fail.

This update can be downloaded from

Screenshot of the feed content source

TweetsToRSS encodes images as text faster.

Subhash TweetsToRSS v2018.09.20 adds support for extended text messages and bio of reply IDs

TweetsToRSS has been built with the latest Twitter4J library and it now supports messages beyond the 140-character limit.

When a tweet has been quoted for a reply, the quote will have the bio of that account.


How to create a Twitter archive of your tweets – Use WkhtmlToPDF and TweetsToRSS to save your tweets as PDF

com.vsubhash.bash.twitter-to-pdf.txt” is a Unix/Linux shell script for archiving all messages posted by a Twitter account in PDF format.

The command to use is:

bash com.vsubhash.bash.twitter-to-pdf.txt \
  realDonaldTrump \
  4000 \

The first argument to bash is the shell script. The second argument is the Twitter account. The third argument is the number of tweets to archive. The fourth argument is used if the Javascript used by TweetsToRSS causes problems with WKhtmlToPDF.

This code assumes that WKhtmlToPDF is available in /opt. Else, you need to update the script. WKhtmlToPDF uses konqueror browser under the hood. The good thing about it is that all HTML links are preserved.

Tweets to PDF conversion

Tweets to PDF conversion

if [ $# -lt 2 ]; then
echo -e "The format is:\n\t\e[35m`basename $0` \e[35;1mtwitter-handle-or-hashtag number-of-tweets [nojs]\e[0m"
# A backup of all files will be available in this Logs directory
if [ ! -d ~/Logs ]; then
mkdir ~/Logs
cd ~/Logs
# Declare variables
# Initialize variables
let "iMaxPages = $2 / $iTweetsPerPage"
let "iRemainder = $2 % $iTweetsPerPage"
if [ $iRemainder -gt 0 ]; then
let "iMaxPages = iMaxPages + 1"
# Javascript to remove YouTube IFrames.
sJavaScript="(function(){var arIframes=document.getElementsByTagName('iframe');var n = arIframes.length; for (var i=0;i<n;i++){ arIframes[0].parentElement.removeChild(arIframes[0]);}})()"
# If Javascript scripts cause problems, use the "nojs" argument to this
# shell script
if [ $# -eq 3 ]; then
# Create archives
for (( iPage=1; iPage $1-meta.txt
echo "InfoValue: Subhash TweetsToRSS (www.vsubhash.com)" >> $1-meta.txt
echo "InfoKey: Title" >> $1-meta.txt
echo "InfoValue: The complete Twitter archive of $1" >> $1-meta.txt
echo "InfoKey: Subject" >> $1-meta.txt
echo "InfoValue: Collection of all tweets from $1" >> $1-meta.txt
echo "InfoKey: Author" >> $1-meta.txt
echo "InfoValue: $1" >> $1-meta.txt
echo "InfoKey: Keywords" >> $1-meta.txt
echo "InfoValue: $1, twitter, tweets, archive" >> $1-meta.txt
pdftk Complete-Twitter-Archive-of-$1.pdf \
update_info $1-meta.txt \
output The-Complete-Twitter-Archive-of-$1.pdf
if [ $# -eq 0 ]; then
notify-send "Twitter archive" "Completed for @$1"
notify-send "Twitter archive" "Error occurred for @$1"
if [ -f The-Complete-Twitter-Archive-of-$1.pdf ]; then
cp ./The-Complete-Twitter-Archive-of-$1.pdf ~/Desktop/The-Complete-Twitter-Archive-of-$1.pdf
# Cleanup
if [ ! -d $1-backup ]; then
mkdir $1-backup
if [ -d $1-backup ]; then
mv -f $1-archive-*.pdf ./$1-backup
mv -f Complete-Twitter-Archive-of-$1.pdf ./$1-backup
mv -f $1-meta.txt ./$1-backup
mv ./The-Complete-Twitter-Archive-of-$1.pdf ./$1-backup

Subhash Browser & Feed Reader and TweetsToRSS for Android updated – v2018.04.29

Subhash Browser & Feed Reader v2018.04.29
The search function failed to find deleted articles. It also was I think unable to find articles where the search term appeared in the beginning of the title. Both bugs have been fixed.


TweetsToRSS v2018.04.29

As mentioned in the “Planned Obsolescence causes “This page requires some information that was not provided. Please …” article, TweetsToRSS for Android has been updated to accept Twit.bin files from the desktop version.

TweetsToRSS accepts Twit.bin file (from the desktop version) if copied to the top of your storage device.

Planned Obsolescence causes “This page requires some information that was not provided. Please …”

Google’s sneaky way of forcing you to upgrade your phone. It supported the HTTPS Everywhere campaign for non-altruistic reasons.

Many of my old Android devices are in good working condition – except the browser. The browser is unable to access many HTTPS websites. Google has made it impossible to update the CA certificate stores in Android devices knowing well this would render the devices unable to access websites using new SSL certificates. My LG phones has been quite a dog from the beginning. I have now decided to use it merely as a media player. Still, I wanted to see if TweetsToRSS would work. Hell no!

Twitter authentication fails in browsers on old Android devices

Subhash TweetsToRSS and EmailTweetor need authentication (a secret PIN generation) by Twitter. This is done using a browser app. When Google renders browser apps obsolete, there seems to be no way to authenticate these apps. No matter which browser you use, the Twitter PIN generation page throws the error “This page requires some information that was not provided. Please return to the site that sent you to this page and try again… it was probably an honest mistake.” Very misleading and uninformative.

  1. One way to avoid this problem is to email the Twitter authentication URL to a newer device or your desktop/laptop computer. Perform the authentication there and generate the PIN. Then type the PIN in your obsoleted device.
    How to email the Twitter authentication URL
  2. For TweetsToRSS, I have provided another solution. Copy the Twit.bin generated by the desktop version and copy it to your storage device.
    TweetsToRSS accepts Twit.bin file (from the desktop version) if copied to the top of your storage device.

Subhash Browser & Feed Reader v2017.10.21 supports all Android versions from Donut to Oreo

  • Support for newer Android versions 5.1+ (Lollipop), Marshmallow (6.x), Nougat (7.x) and Oreo (8.x). (The Google Play download does not work with these Android versions.)
  • Web Browser: Page loading progress bar has moved from the title bar to the address bar. This feature was required as the title bar can be disabled. When the Internet connection is slow you don’t know what is happening if the title bar is hidden.

    The progress bar has moved.

  • Feed Reader: When the Old button is enabled to display deleted articles, the Delete button will appear as an Undelete button on deleted articles. Now the functionality resembles the old Presto-based Opera browser’s Show Thrash functionality.
  • Downloads: File renaming bugs have been fixed.

The support for newer Android versions did not require any special coding. I just needed to make it look like pre 5.1 app in the Android manifest file of the APK. In my over-enthusiasm for forward compatibility, I had declared support for these Android versions long before they were released. Now, Google Play will not allow the APK to pretend to be an older app.

I still use the Eclipse-based Motodev Studio to develop my Android apps. (Google has obsoleted support for Eclipse and has asked developers to move to the IntelliJ-based Android Studio. I don’t like the new IDE.) All my apps are based on Android 1.6 (Donut) for backward compatibility. I was able to use newer Android functionality using Java reflection abilities of my library AndroidWithoutStupid. I was unable to add compatibility to newer Android versions using the code route as Android uses another “compat” library. The manifest file route for compatibility was much more simpler and I had to go with it.

Google Play’s APK system has been made more complicated and I don’t want to deal with it. So, even TweetsToRSS will not be updated to Google Play and will be available as a download from vsubhash.com.