From eced1cf2687682e9c0216d9fc92c1d05990f8d5a Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Fri, 25 Jun 2021 02:25:43 +0530 Subject: added blog32twitter --- docs/posts/2021-06-25-Blog2Twitter-P1.html | 119 +++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 docs/posts/2021-06-25-Blog2Twitter-P1.html (limited to 'docs') diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html new file mode 100644 index 0000000..7393f4b --- /dev/null +++ b/docs/posts/2021-06-25-Blog2Twitter-P1.html @@ -0,0 +1,119 @@ + + + + + + + + + Hey - Post + + + + + +
+

Posting Blog Posts as Twitter Threads Part 1/n

+ +

Why? Eh, no good reason, but should be fun.

+ +

Plan of Action

+ +

I recently shifted my website to a static site generator I wrote specifically for myself. +Thus, it should be easy to just add a feature into it to check for new posts, split the text into chunks for Twitter threads and post them on Twitter. +I am not handling lists or images right now.

+ +

Time to Code

+ +

First, the dependency: tweepy for tweeting.

+ +

pip install tweepy

+ +
import os
+import tweepy
+
+consumer_key = os.environ["consumer_key"]
+consumer_secret = os.environ["consumer_secret"]
+
+access_token = os.environ["access_token"]
+access_token_secret = os.environ["access_token_secret"]
+
+auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
+auth.set_access_token(access_token, access_token_secret)
+
+api = tweepy.API(auth)
+
+ +

The program need to convert the blog post into text fragments.

+ +

It reads the markdown file, removes the top YAML content, checks for headers and splits the content.

+ +
tweets = []
+
+first___n = 0
+
+with open(sample_markdown_file) as f:
+    for line in f.readlines():
+        if first___n <= 1:
+            if line == "---\n":
+                first___n += 1
+            continue
+        line = line.strip()
+        line += " "
+        if "#" in line:
+            line = line.replace("#","")
+            line.strip()
+            line = "\n" + line
+            line += "\n\n"
+        try:
+            if len(tweets[-1]) < 260 and (len(tweets[-1]) + len(line)) <= 260:
+                tweets[-1] += line
+            else:
+                tweets.append(line)
+        except IndexError:
+            if len(line) > 260:
+                print("ERROR")
+            else:
+                tweets.append(line)
+
+ +

Every status update using tweepy has an id attached to it, for the next tweet in the thread, it add that ID while calling the function.

+ +

For every tweet fragment, it also append 1/n.

+ +
for idx, tweet in enumerate(tweets):
+    tweet += " {}/{}".format(idx+1,len(tweets))
+    if idx == 0:
+        a = None
+        a = api.update_status(tweet)
+    else:
+        a = api.update_status(tweet,in_reply_to_status_id=a.id)
+    print(len(tweet),end=" ")
+    print("{}/{}\n".format(idx+1,len(tweets)))
+
+ +

Finally, it replies to the last tweet in the thread with the link of the post.

+ +
api.update_status("Web Version: {}".format(post_link))
+
+ +

What's Next?

+ +

For the next part, I will try to append the code as well. +I actually added the code to this post after running the program.

+ +
+ + + + + + \ No newline at end of file -- cgit v1.2.3