From eced1cf2687682e9c0216d9fc92c1d05990f8d5a Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Fri, 25 Jun 2021 02:25:43 +0530 Subject: added blog32twitter --- Content/posts/2021-06-25-Blog2Twitter-P1.md | 98 +++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Content/posts/2021-06-25-Blog2Twitter-P1.md (limited to 'Content/posts') diff --git a/Content/posts/2021-06-25-Blog2Twitter-P1.md b/Content/posts/2021-06-25-Blog2Twitter-P1.md new file mode 100644 index 0000000..3c9bb83 --- /dev/null +++ b/Content/posts/2021-06-25-Blog2Twitter-P1.md @@ -0,0 +1,98 @@ +--- +date: 2021-06-25 00:08 +description: Converting Posts to Twitter Threads +tags: Python, Twitter, Eh +--- + +# 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` + +```python +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. + +```python +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. + +```python +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. + +```python +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