summaryrefslogtreecommitdiff
path: root/docs/posts/2021-06-25-Blog2Twitter-P1.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/posts/2021-06-25-Blog2Twitter-P1.html')
-rw-r--r--docs/posts/2021-06-25-Blog2Twitter-P1.html193
1 files changed, 0 insertions, 193 deletions
diff --git a/docs/posts/2021-06-25-Blog2Twitter-P1.html b/docs/posts/2021-06-25-Blog2Twitter-P1.html
deleted file mode 100644
index 75ec1c1..0000000
--- a/docs/posts/2021-06-25-Blog2Twitter-P1.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="theme-color" content="#6a9fb5">
-
- <title>Posting Blog Posts as Twitter Threads Part 1/n</title>
-
- <!--
- <link rel="stylesheet" href="https://unpkg.com/latex.css/style.min.css" />
- -->
-
- <link rel="stylesheet" href="/assets/c-hyde.css">
-
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface">
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700">
-
- <link rel="stylesheet" href="/assets/main.css">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="og:site_name" content="Navan Chauhan">
- <link rel="canonical" href="https://web.navan.dev/posts/2021-06-25-Blog2Twitter-P1.html">
- <meta name="twitter:url" content="https://web.navan.dev/posts/2021-06-25-Blog2Twitter-P1.html">
- <meta name="og:url" content="https://web.navan.dev/posts/2021-06-25-Blog2Twitter-P1.html">
- <meta name="twitter:title" content="Posting Blog Posts as Twitter Threads Part 1/n">
- <meta name="og:title" content="Posting Blog Posts as Twitter Threads Part 1/n">
- <meta name="description" content="Converting Posts to Twitter Threads">
- <meta name="twitter:description" content="Converting Posts to Twitter Threads">
- <meta name="og:description" content="Converting Posts to Twitter Threads">
- <meta name="twitter:card" content="summary_large_image">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <link rel="shortcut icon" href="/images/favicon.png" type="image/png">
- <link href="/feed.rss" type="application/atom+xml" rel="alternate" title="Sitewide Atom feed">
- <meta name="twitter:image" content="https://web.navan.dev/images/opengraph/posts/2021-06-25-Blog2Twitter-P1.png">
- <meta name="og:image" content="https://web.navan.dev/images/opengraph/posts/2021-06-25-Blog2Twitter-P1.png">
- <meta name="google-site-verification" content="LVeSZxz-QskhbEjHxOi7-BM5dDxTg53x2TwrjFxfL0k">
- <script data-goatcounter="https://navanchauhan.goatcounter.com/count"
- async src="//gc.zgo.at/count.js"></script>
- <script defer data-domain="web.navan.dev" src="https://plausible.io/js/plausible.js"></script>
- <link rel="manifest" href="/manifest.json">
-
-</head>
-<body class="theme-base-0d">
- <div class="sidebar">
- <div class="container sidebar-sticky">
- <div class="sidebar-about">
- <h1><a href="/">Navan</a></h1>
- <p class="lead" id="random-lead">Alea iacta est.</p>
- </div>
-
- <ul class="sidebar-nav">
- <li><a class="sidebar-nav-item" href="/about/">about/links</a></li>
- <li><a class="sidebar-nav-item" href="/posts/">posts</a></li>
- <li><a class="sidebar-nav-item" href="/3D-Designs/">3D designs</a></li>
- <li><a class="sidebar-nav-item" href="/feed.rss">RSS Feed</a></li>
- <li><a class="sidebar-nav-item" href="/colophon/">colophon</a></li>
- </ul>
- <div class="copyright"><p>&copy; 2019-2024. Navan Chauhan <br> <a href="/feed.rss">RSS</a></p></div>
- </div>
-</div>
-
-<script>
-let phrases = [
- "Something Funny", "Veni, vidi, vici", "Alea iacta est", "In vino veritas", "Acta, non verba", "Castigat ridendo mores",
- "Cui bono?", "Memento vivere", "अहम् ब्रह्मास्मि", "अनुगच्छतु प्रवाहं", "चरन्मार्गान्विजानाति", "coq de cheval", "我愛啤酒"
- ];
-
-let new_phrase = phrases[Math.floor(Math.random()*phrases.length)];
-
-let lead = document.getElementById("random-lead");
-lead.innerText = new_phrase;
-</script>
- <div class="content container">
-
- <div class="post">
- <h1 id="posting-blog-posts-as-twitter-threads-part-1n">Posting Blog Posts as Twitter Threads Part 1/n</h1>
-
-<p>Why? Eh, no good reason, but should be fun.</p>
-
-<h2 id="plan-of-action">Plan of Action</h2>
-
-<p>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 to check for new posts, split the text into chunks for Twitter threads and tweet them.
-I am not handling lists or images right now.</p>
-
-<h2 id="time-to-code">Time to Code</h2>
-
-<p>First, the dependency: tweepy for tweeting.</p>
-
-<p><code>pip install tweepy</code></p>
-
-<div class="codehilite">
-<pre><span></span><code><span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">import</span> <span class="nn">tweepy</span>
-
-<span class="n">consumer_key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;consumer_key&quot;</span><span class="p">]</span>
-<span class="n">consumer_secret</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;consumer_secret&quot;</span><span class="p">]</span>
-
-<span class="n">access_token</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;access_token&quot;</span><span class="p">]</span>
-<span class="n">access_token_secret</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;access_token_secret&quot;</span><span class="p">]</span>
-
-<span class="n">auth</span> <span class="o">=</span> <span class="n">tweepy</span><span class="o">.</span><span class="n">OAuthHandler</span><span class="p">(</span><span class="n">consumer_key</span><span class="p">,</span> <span class="n">consumer_secret</span><span class="p">)</span>
-<span class="n">auth</span><span class="o">.</span><span class="n">set_access_token</span><span class="p">(</span><span class="n">access_token</span><span class="p">,</span> <span class="n">access_token_secret</span><span class="p">)</span>
-
-<span class="n">api</span> <span class="o">=</span> <span class="n">tweepy</span><span class="o">.</span><span class="n">API</span><span class="p">(</span><span class="n">auth</span><span class="p">)</span>
-</code></pre>
-</div>
-
-<p>The program need to convert the blog post into text fragments.</p>
-
-<p>It reads the markdown file, removes the top YAML content, checks for headers and splits the content.</p>
-
-<div class="codehilite">
-<pre><span></span><code><span class="n">tweets</span> <span class="o">=</span> <span class="p">[]</span>
-
-<span class="n">first___n</span> <span class="o">=</span> <span class="mi">0</span>
-
-<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">sample_markdown_file</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
- <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">():</span>
- <span class="k">if</span> <span class="n">first___n</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
- <span class="k">if</span> <span class="n">line</span> <span class="o">==</span> <span class="s2">&quot;---</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span>
- <span class="n">first___n</span> <span class="o">+=</span> <span class="mi">1</span>
- <span class="k">continue</span>
- <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
- <span class="n">line</span> <span class="o">+=</span> <span class="s2">&quot; &quot;</span>
- <span class="k">if</span> <span class="s2">&quot;#&quot;</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
- <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
- <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
- <span class="n">line</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">line</span>
- <span class="n">line</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">&quot;</span>
- <span class="k">try</span><span class="p">:</span>
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tweets</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">&lt;</span> <span class="mi">260</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tweets</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">))</span> <span class="o">&lt;=</span> <span class="mi">260</span><span class="p">:</span>
- <span class="n">tweets</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">line</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">tweets</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
- <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">260</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">)</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">tweets</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
-</code></pre>
-</div>
-
-<p>Every status update using tweepy has an id attached to it, for the next tweet in the thread, it adds that ID while calling the function.</p>
-
-<p>For every tweet fragment, it also appends 1/n.</p>
-
-<div class="codehilite">
-<pre><span></span><code><span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">tweet</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">tweets</span><span class="p">):</span>
- <span class="n">tweet</span> <span class="o">+=</span> <span class="s2">&quot; </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">tweets</span><span class="p">))</span>
- <span class="k">if</span> <span class="n">idx</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
- <span class="n">a</span> <span class="o">=</span> <span class="kc">None</span>
- <span class="n">a</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="n">update_status</span><span class="p">(</span><span class="n">tweet</span><span class="p">)</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">a</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="n">update_status</span><span class="p">(</span><span class="n">tweet</span><span class="p">,</span><span class="n">in_reply_to_status_id</span><span class="o">=</span><span class="n">a</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tweet</span><span class="p">),</span><span class="n">end</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">tweets</span><span class="p">)))</span>
-</code></pre>
-</div>
-
-<p>Finally, it replies to the last tweet in the thread with the link of the post.</p>
-
-<div class="codehilite">
-<pre><span></span><code><span class="n">api</span><span class="o">.</span><span class="n">update_status</span><span class="p">(</span><span class="s2">&quot;Web Version: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">post_link</span><span class="p">))</span>
-</code></pre>
-</div>
-
-<h2 id="result">Result</h2>
-
-<p><blockquote class="twitter-tweet" data-dnt="true" data-theme="dark"><p lang="en" dir="ltr">Posting Blog Posts as Twitter Threads Part 1/n <br><br> Why? Eh, no good reason, but should be fun. <br> Plan of Action <br><br> I recently shifted my website to a static site generator I wrote specifically for myself. 1/5</p>&mdash; Navan Chauhan (@navanchauhan) <a rel="noopener" target="_blank" href="https://twitter.com/navanchauhan/status/1408165730487443456?ref_src=twsrc%5Etfw">June 24, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
-
-<p><blockquote class="twitter-tweet" data-lang="en" data-dnt="true" data-theme="dark"><p lang="en" dir="ltr">Web Version: <a rel="noopener" target="_blank" href="https://t.co/zROU1F5DYv">https://t.co/zROU1F5DYv</a></p>&mdash; Navan Chauhan (@navanchauhan) <a rel="noopener" target="_blank" href="https://twitter.com/navanchauhan/status/1408168879617052674?ref_src=twsrc%5Etfw">June 24, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
-
-<h2 id="whats-next">What's Next?</h2>
-
-<p>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.</p>
-
- </div>
- <blockquote>If you have scrolled this far, consider subscribing to my mailing list <a href="https://listmonk.navan.dev/subscription/form">here.</a> You can subscribe to either a specific type of post you are interested in, or subscribe to everything with the "Everything" list.</blockquote>
- <script data-isso="https://comments.navan.dev/"
- src="https://comments.navan.dev/js/embed.min.js"></script>
- <div id="isso-thread">
- <noscript>Javascript needs to be activated to view comments.</noscript>
- </div>
-
- </div>
- <script src="assets/manup.min.js"></script>
- <script src="/pwabuilder-sw-register.js"></script>
-</body>
-</html> \ No newline at end of file