{
  "version": "https://jsonfeed.org/version/1",
  "title": "Zortazert's Blog",
  "home_page_url": "http://www.zortazert.codeberg.page/",
  "description": "My latest articles",
  "items": [
    {
      "guid": "https://zortazert.codeberg.page/Blog/switching-to-emacs.html/",
      "url": "https://zortazert.codeberg.page/Blog/switching-to-emacs.html/",
      "title": "Switching to Emacs",
      "date_published": "2021-07-18T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/Amazon.html",
      "url": "https://zortazert.codeberg.page/Blog/Amazon.html",
      "title": "Amazon",
      "date_published": "2021-07-19T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/chat-clients.html",
      "url": "https://zortazert.codeberg.page/Blog/chat-clients.html",
      "title": "Chat Clients",
      "date_published": "2021-07-20T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/browsers.html",
      "url": "https://zortazert.codeberg.page/Blog/browsers.html",
      "title": "Browsers",
      "date_published": "2021-07-21T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/warning-on-gmail-sighn-in.html",
      "url": "https://zortazert.codeberg.page/Blog/warning-on-gmail-sighn-in.html",
      "title": "[Warning] Gmail may take over for sighn in and log in",
      "date_published": "2021-07-22T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/qt-software.html",
      "url": "https://zortazert.codeberg.page/Blog/qt-software.html",
      "title": "Imposter QT",
      "date_published": "2021-07-30T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/note-taking.html",
      "url": "https://zortazert.codeberg.page/Blog/note-taking.html",
      "title": "Why use Notes",
      "date_published": "2021-10-16T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/vim.pdf",
      "url": "https://zortazert.codeberg.page/Blog/vim.pdf",
      "title": "Why I use and love vim",
      "date_published": "2021-10-15T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/4chan.pdf",
      "url": "https://zortazert.codeberg.page/Blog/4chan.pdf",
      "title": "4chan the Best Social Media Platform!",
      "date_published": "2021-09-11T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/4chan-is-propietary.html",
      "url": "https://zortazert.codeberg.page/Blog/4chan-is-propietary.html",
      "title": "4chan is Propietary Software! Use Odysee.",
      "date_published": "2021-09-11T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/emacs-is-cool.html",
      "url": "https://zortazert.codeberg.page/Blog/emacs-is-cool.html",
      "title": "Emacs is cool",
      "date_published": "2021-11-05T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/rssgentk.html",
      "url": "https://zortazert.codeberg.page/Blog/rssgentk.html",
      "title": "Analyzing rssgentk.py",
      "date_published": "2021-11-10T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/codeberg-dark.html",
      "url": "https://zortazert.codeberg.page/Blog/codeberg-dark.html",
      "title": "Adding dark mode to codeberg.",
      "date_published": "2021-11-11T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/greasemonkey-redirect.html",
      "url": "https://zortazert.codeberg.page/Blog/greasemonkey-redirect.html",
      "title": "Greasemonkey Redirect",
      "date_published": "2021-11-11T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/zortazert.codeberg.page/Blog/evil-commands.html",
      "url": "https://zortazert.codeberg.page/zortazert.codeberg.page/Blog/evil-commands.html",
      "title": "Evil Commands",
      "date_published": "2021-11-14T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/org-babel.html",
      "url": "https://zortazert.codeberg.page/Blog/org-babel.html",
      "title": "Org Babel for the Win!",
      "date_published": "2021-11-15T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/emacs-spell-check.html",
      "url": "https://zortazert.codeberg.page/Blog/emacs-spell-check.html",
      "title": "Emacs Spell Check!",
      "date_published": "2021-11-18T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/searx.html",
      "url": "https://zortazert.codeberg.page/Blog/searx.html",
      "title": "Search Engines (Searx)",
      "date_published": "2021-11-19T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/blog.html",
      "url": "https://zortazert.codeberg.page/Blog/blog.html",
      "title": "Analyzing blog.py",
      "content_html": "<h1 id=\"org-9bd3428636\">What?</h1><p>  This is a script to generate RSS for me. There are some other alternative systems like Luke smith&#39;s LB script that generate RSS for you and it&#39;s really cool. I have wanted for a long time to have something like this. So I created my own script in python. This is how it works.</p><h1 id=\"org-f77115b18d\">Time</h1><p>  In a previous version of this script I had to manuely add <b>Time</b> This was annoying since I have trouble with dates. With this time module it will generate the current time for me.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># I need to get time instead of asking manuelly for it.</span><span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">gmtime</span><span class=\"p\">,</span> <span class=\"n\">strftime</span></pre></div><h1 id=\"org-27c37a8873\">Inputs</h1><p>  Here I get two peices of data from the user the <code>title</code> and <code>Link</code> of the blog entry. Then I get the date using something I found on python time module documentation. Also I specify the rssfile to be rss.xml. Usually you will always have the rss file called rss.xml but I think it&#39;s a good idea to have it as a variable anyways. For now the htmlfile variable is commented out because I can&#39;t figure out how to properly clean up html files and put them into the description.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Inputs</span><span class=\"n\">Title</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Title: &quot;</span><span class=\"p\">)</span><span class=\"n\">Link</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Link: &quot;</span><span class=\"p\">)</span><span class=\"n\">Date</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%a</span><span class=\"s2\">, </span><span class=\"si\">%d</span><span class=\"s2\"> %b %Y </span><span class=\"si\">%X</span><span class=\"s2\">&quot;</span><span class=\"p\">))</span><span class=\"c1\">#htmlfile = input(&quot;HTML file: &quot;)</span><span class=\"n\">rssfile</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;rss.xml&quot;</span></pre></div><h1 id=\"org-0f391b7136\">Delete channel and rss tags</h1><p>  The <code>&lt;/channel&gt;</code> and <code>&lt;/rss&gt;</code> tags placed at the bottom get in the way of inserting entries also at the bottom of the rss file. So I delete them. I also have some code I previously I had for the html file clean up for putting in the description.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># cdata ~&gt; Description ~&gt; Reads in rss reader I hope :-)</span><span class=\"c1\"># I need to figure out how to get data from &lt;p&gt; in html file</span><span class=\"c1\"># htmlfile = str(&quot;&lt;![CDATA[ &quot;+open(htmlfile).read().replace(&#39;\\n&#39;, &#39; &#39;)+&quot; ]]&gt;&quot;)</span><span class=\"c1\"># Delete channel and rss tags</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">r</span><span class=\"p\">:</span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/channel&gt;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/rss&gt;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot; &quot;</span><span class=\"p\">)</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">w</span><span class=\"p\">:</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span></pre></div><h1 id=\"org-c3503daae6\">Input all the information for the entry.</h1><p>  This is the most important part of the script. Using all the gathered variables I open the rss file and start appending text to it with f.write. For now the description isn&#39;t really awesome with the whole article easily accessible.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Add stuff</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;item&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;title&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Title</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/title&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;link&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Link</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/link&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;guid&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Link</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/guid&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;pubDate&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Date</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/pubDate&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;description&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;![CDATA[ You can consume this content in any app you like! ]]&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/description&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/item&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/channel&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/rss&gt;&quot;</span><span class=\"p\">)</span></pre></div><div class=\"highlight\"><pre><span></span><span class=\"c1\"># f.write(&quot;\\n&lt;item&gt;\\n&lt;title&gt;&quot;+Title+&quot;&lt;/title&gt;\\n&lt;link&gt;&quot;+Link+&quot;&lt;/link&gt;\\n&lt;guid&gt;&quot;+Link+&quot;&lt;/guid&gt;\\n&lt;pubDate&gt;&quot;+Date+&quot;&lt;/pubDate&gt;\\n&lt;description&gt;\\n&quot;+htmlfile+&quot;\\n&lt;/description&gt;\\n&lt;/item&gt;\\n\\n&lt;/channel&gt;\\n&lt;/rss&gt;&quot;)</span></pre></div><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-9bd3428636\">What?</h1><p>  This is a script to generate RSS for me. There are some other alternative systems like Luke smith&#39;s LB script that generate RSS for you and it&#39;s really cool. I have wanted for a long time to have something like this. So I created my own script in python. This is how it works.</p><h1 id=\"org-f77115b18d\">Time</h1><p>  In a previous version of this script I had to manuely add <b>Time</b> This was annoying since I have trouble with dates. With this time module it will generate the current time for me.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># I need to get time instead of asking manuelly for it.</span><span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">gmtime</span><span class=\"p\">,</span> <span class=\"n\">strftime</span></pre></div><h1 id=\"org-27c37a8873\">Inputs</h1><p>  Here I get two peices of data from the user the <code>title</code> and <code>Link</code> of the blog entry. Then I get the date using something I found on python time module documentation. Also I specify the rssfile to be rss.xml. Usually you will always have the rss file called rss.xml but I think it&#39;s a good idea to have it as a variable anyways. For now the htmlfile variable is commented out because I can&#39;t figure out how to properly clean up html files and put them into the description.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Inputs</span><span class=\"n\">Title</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Title: &quot;</span><span class=\"p\">)</span><span class=\"n\">Link</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Link: &quot;</span><span class=\"p\">)</span><span class=\"n\">Date</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%a</span><span class=\"s2\">, </span><span class=\"si\">%d</span><span class=\"s2\"> %b %Y </span><span class=\"si\">%X</span><span class=\"s2\">&quot;</span><span class=\"p\">))</span><span class=\"c1\">#htmlfile = input(&quot;HTML file: &quot;)</span><span class=\"n\">rssfile</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;rss.xml&quot;</span></pre></div><h1 id=\"org-0f391b7136\">Delete channel and rss tags</h1><p>  The <code>&lt;/channel&gt;</code> and <code>&lt;/rss&gt;</code> tags placed at the bottom get in the way of inserting entries also at the bottom of the rss file. So I delete them. I also have some code I previously I had for the html file clean up for putting in the description.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># cdata ~&gt; Description ~&gt; Reads in rss reader I hope :-)</span><span class=\"c1\"># I need to figure out how to get data from &lt;p&gt; in html file</span><span class=\"c1\"># htmlfile = str(&quot;&lt;![CDATA[ &quot;+open(htmlfile).read().replace(&#39;\\n&#39;, &#39; &#39;)+&quot; ]]&gt;&quot;)</span><span class=\"c1\"># Delete channel and rss tags</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">r</span><span class=\"p\">:</span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/channel&gt;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/rss&gt;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot; &quot;</span><span class=\"p\">)</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">w</span><span class=\"p\">:</span><span class=\"n\">w</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span></pre></div><h1 id=\"org-c3503daae6\">Input all the information for the entry.</h1><p>  This is the most important part of the script. Using all the gathered variables I open the rss file and start appending text to it with f.write. For now the description isn&#39;t really awesome with the whole article easily accessible.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Add stuff</span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">rssfile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;item&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;title&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Title</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/title&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;link&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Link</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/link&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;guid&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Link</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/guid&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;pubDate&gt;&quot;</span><span class=\"o\">+</span><span class=\"n\">Date</span><span class=\"o\">+</span><span class=\"s2\">&quot;&lt;/pubDate&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;description&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;![CDATA[ You can consume this content in any app you like! ]]&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/description&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/item&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/channel&gt;&quot;</span><span class=\"p\">)</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&lt;/rss&gt;&quot;</span><span class=\"p\">)</span></pre></div><div class=\"highlight\"><pre><span></span><span class=\"c1\"># f.write(&quot;\\n&lt;item&gt;\\n&lt;title&gt;&quot;+Title+&quot;&lt;/title&gt;\\n&lt;link&gt;&quot;+Link+&quot;&lt;/link&gt;\\n&lt;guid&gt;&quot;+Link+&quot;&lt;/guid&gt;\\n&lt;pubDate&gt;&quot;+Date+&quot;&lt;/pubDate&gt;\\n&lt;description&gt;\\n&quot;+htmlfile+&quot;\\n&lt;/description&gt;\\n&lt;/item&gt;\\n\\n&lt;/channel&gt;\\n&lt;/rss&gt;&quot;)</span></pre></div><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-11-26T18:57:23.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/extensions-I-use.html",
      "url": "https://zortazert.codeberg.page/Blog/extensions-I-use.html",
      "title": "Extensions I use",
      "content_html": "<h1 id=\"org-cdd0e11c52\">What extensions do I use</h1><p>To enhance and add features to my browser I use quite a bit of extensions in this list I will go over them</p><h1 id=\"org-f119e9aa25\">Usual browsers e.g. Chromium/FireFox (Newer)</h1><h2 id=\"org-22c726c954\">Simply Translate</h2><p>This will on a selection of text auto convert it to a language it thinks it is after clicking the button. This is way better then using google translate.</p><h2 id=\"org-3f47e08aed\">Privacy Redirect/Violent Monkey</h2><p>I have privacy redirect installed just in case for redirecting bad sites to freedom respecting ones. Most of the time though I use a community created repo of greasemonkey scripts.</p><h2 id=\"org-80916b5d27\">Ublock Origin</h2><p>This will basicly do all of the add blocking you will ever need. It also can block javascript and does many more things I don&#39;t know about.</p><h1 id=\"org-3ef1816e5d\">Palemoon Addons.</h1><p>These are addons that are very much specific to palemoon. There easily findable on the palemoon website&#39;s addon section.</p><h2 id=\"org-9fe6120377\">Ublock Origin (Legacy)</h2><p>This is a forked version of Ublock Origin for older firefox based browsers such as palemoon. It feels a bit different than the usual ublock origin but it works still.</p><h2 id=\"org-834e4affcb\">Greasemonkey for Pale Moon</h2><p>A pretty decent greasemonkey script handler for Palemoon. Puts a <code>User Scripts</code> section in <code>about:adons</code>. Once again I use scripts from my Greasemonkey Redirect repository.</p><h2 id=\"org-19702b3c99\">GitHub/GitLab Web Components Polyfill</h2><p>This extension makes:</p><ul><li><p>GitLab (main instance) actually load and show you information about the repository</p></li><li><p>GitHub work better for account related things. Not everything will work but way better than nothing.</p></li></ul><h2 id=\"org-dbe20262e0\">Dismiss The Overlay</h2><p>I <b>really</b> like this extension. On bloated websites with nasty overlays all I need to do to stop them is click the button which looks like curtain and the overlays go bye bye. I don&#39;t know if other browsers have this too.</p><h2 id=\"org-70941407a3\">PDF Viewer</h2><p>By default for some reason palemoon doesn&#39;t have a pdf viewer when seeing pdf links. So for me since I have adobe acrobat installed it actually <b>in browser</b> started using adobe acrobat. It was weird. PDF viewer makes it work right.</p><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-cdd0e11c52\">What extensions do I use</h1><p>To enhance and add features to my browser I use quite a bit of extensions in this list I will go over them</p><h1 id=\"org-f119e9aa25\">Usual browsers e.g. Chromium/FireFox (Newer)</h1><h2 id=\"org-22c726c954\">Simply Translate</h2><p>This will on a selection of text auto convert it to a language it thinks it is after clicking the button. This is way better then using google translate.</p><h2 id=\"org-3f47e08aed\">Privacy Redirect/Violent Monkey</h2><p>I have privacy redirect installed just in case for redirecting bad sites to freedom respecting ones. Most of the time though I use a community created repo of greasemonkey scripts.</p><h2 id=\"org-80916b5d27\">Ublock Origin</h2><p>This will basicly do all of the add blocking you will ever need. It also can block javascript and does many more things I don&#39;t know about.</p><h1 id=\"org-3ef1816e5d\">Palemoon Addons.</h1><p>These are addons that are very much specific to palemoon. There easily findable on the palemoon website&#39;s addon section.</p><h2 id=\"org-9fe6120377\">Ublock Origin (Legacy)</h2><p>This is a forked version of Ublock Origin for older firefox based browsers such as palemoon. It feels a bit different than the usual ublock origin but it works still.</p><h2 id=\"org-834e4affcb\">Greasemonkey for Pale Moon</h2><p>A pretty decent greasemonkey script handler for Palemoon. Puts a <code>User Scripts</code> section in <code>about:adons</code>. Once again I use scripts from my Greasemonkey Redirect repository.</p><h2 id=\"org-19702b3c99\">GitHub/GitLab Web Components Polyfill</h2><p>This extension makes:</p><ul><li><p>GitLab (main instance) actually load and show you information about the repository</p></li><li><p>GitHub work better for account related things. Not everything will work but way better than nothing.</p></li></ul><h2 id=\"org-dbe20262e0\">Dismiss The Overlay</h2><p>I <b>really</b> like this extension. On bloated websites with nasty overlays all I need to do to stop them is click the button which looks like curtain and the overlays go bye bye. I don&#39;t know if other browsers have this too.</p><h2 id=\"org-70941407a3\">PDF Viewer</h2><p>By default for some reason palemoon doesn&#39;t have a pdf viewer when seeing pdf links. So for me since I have adobe acrobat installed it actually <b>in browser</b> started using adobe acrobat. It was weird. PDF viewer makes it work right.</p><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-11-30T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/programming-langs.html",
      "url": "https://zortazert.codeberg.page/Blog/programming-langs.html",
      "title": "Programing Languages I use",
      "content_html": "<h1 id=\"org-97ae48ae5d\">Python</h1><p>For basicly all automation, creating gui apps and much more. The sky is the limit with python. I love python.</p><h1 id=\"org-ccf9c84173\">Shell Script</h1><p>I haven&#39;t used it in a while. You can do most everything in it except for GUI applications etc. I don&#39;t like it for the main reason of it doesn&#39;t work on all platforms. It is limited to whatever has a shell and some software.</p><h1 id=\"org-f3484b2081\">Greasemonkey/JS</h1><p>I don&#39;t know this language that well. I have just made a repo with community scripts in it for redirecting bad none privacy respecting links to better ones. It&#39;s very cool.</p><h1 id=\"org-1cc37c3ce8\">MD</h1><p>I use MD rarely because I don&#39;t like the amount of versions it has and the syntax if italics and bold I really don&#39;t like. It simply isn&#39;t the best. I do like using it sometimes though git repositories.</p><h1 id=\"org-8ec5acdf8e\">ORG</h1><p>Org is a special language. You can do so much with it. It&#39;s readable, it&#39;s beatifule and makes my life better.</p><h1 id=\"org-3b67920cb3\">HTML</h1><p>HTML I like using for some of my website pages. Though for blogs it&#39;s easier to use ORG to HTML. Obviously using CSS with HTML for styling on all pages.</p><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-97ae48ae5d\">Python</h1><p>For basicly all automation, creating gui apps and much more. The sky is the limit with python. I love python.</p><h1 id=\"org-ccf9c84173\">Shell Script</h1><p>I haven&#39;t used it in a while. You can do most everything in it except for GUI applications etc. I don&#39;t like it for the main reason of it doesn&#39;t work on all platforms. It is limited to whatever has a shell and some software.</p><h1 id=\"org-f3484b2081\">Greasemonkey/JS</h1><p>I don&#39;t know this language that well. I have just made a repo with community scripts in it for redirecting bad none privacy respecting links to better ones. It&#39;s very cool.</p><h1 id=\"org-1cc37c3ce8\">MD</h1><p>I use MD rarely because I don&#39;t like the amount of versions it has and the syntax if italics and bold I really don&#39;t like. It simply isn&#39;t the best. I do like using it sometimes though git repositories.</p><h1 id=\"org-8ec5acdf8e\">ORG</h1><p>Org is a special language. You can do so much with it. It&#39;s readable, it&#39;s beatifule and makes my life better.</p><h1 id=\"org-3b67920cb3\">HTML</h1><p>HTML I like using for some of my website pages. Though for blogs it&#39;s easier to use ORG to HTML. Obviously using CSS with HTML for styling on all pages.</p><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-11-30T00:00:00.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/stream-to-odysee.html",
      "url": "https://zortazert.codeberg.page/Blog/stream-to-odysee.html",
      "title": "Stream to odysee!",
      "content_html": "<p>As of now <a href=\"https://odysee.com\">odysee</a>allows for live streaming. Here is how to do it.</p><ol><li><p> Donate 100LBC to your self. Not a video, but your actual channel. </p></li></ol><ol><li><p> Find livestream in your <code>uploads</code> tab when clicking the <code>upload</code> button you should see <code>Livestream</code> as one of the options.</p></li><li><p> Fill out info for the publication and click upload.</p></li><li><p> Get your stream key You should see now that odysee will have given you a stream key. <b>DO NOT SHARE TO ANYONE</b>. You should also see a server name.</p></li><li><p> <a href=\"https://obsproject.com\">OBS</a>with this program you will be able to stream to odysee. As far as I know there are no other ways to do it.</p></li><li><p> Go to <code>file &gt; settings &gt; stream</code> in the <code>service</code> do custom, in the Server to <code>rtmp://stream.odysee.com/live</code> and in the stream key put in your stream key.</p></li><li><p> Click <code>apply</code> and <code>ok</code> and you should be good to go.</p></li></ol><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<p>As of now <a href=\"https://odysee.com\">odysee</a>allows for live streaming. Here is how to do it.</p><ol><li><p> Donate 100LBC to your self. Not a video, but your actual channel. </p></li></ol><ol><li><p> Find livestream in your <code>uploads</code> tab when clicking the <code>upload</code> button you should see <code>Livestream</code> as one of the options.</p></li><li><p> Fill out info for the publication and click upload.</p></li><li><p> Get your stream key You should see now that odysee will have given you a stream key. <b>DO NOT SHARE TO ANYONE</b>. You should also see a server name.</p></li><li><p> <a href=\"https://obsproject.com\">OBS</a>with this program you will be able to stream to odysee. As far as I know there are no other ways to do it.</p></li><li><p> Go to <code>file &gt; settings &gt; stream</code> in the <code>service</code> do custom, in the Server to <code>rtmp://stream.odysee.com/live</code> and in the stream key put in your stream key.</p></li><li><p> Click <code>apply</code> and <code>ok</code> and you should be good to go.</p></li></ol><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-12-01T09:46:50.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/degoogle.html",
      "url": "https://zortazert.codeberg.page/Blog/degoogle.html",
      "title": "Degoogle",
      "content_html": "<h1 id=\"org-9f6704f36d\">Google&#39;s Popularity</h1><p>Google is like a household name to a lot of people that use the computer. For the price of <b>0 DOLLARS</b> the registered account gets access to free email. Email is essential for authenticating accounts, messaging freinds and a lot of things. So you need a email and you just turn to google. </p><p>I remember being super young and someone brought up having a email. Saying:&#34;You can&#39;t make a google account without being over 13!&#34;</p><p>I thought this was strange and wanted to see if this was true. Going to my computer I tried and was locked from making a account, just because I was 8 years old and not 13. What I didn&#39;t know is all the information I just gave to google right the and there. I gave my real birth date, name, last name probably home address. <b>Everything</b>.</p><p>Now imagine this scenario with people actually use the google service.</p><h1 id=\"org-5006d04d6f\">Google&#39;s services</h1><p>With google you get a LOT of services. Each and every one of them is proprietary. Each and everyone of them gives your data to google. I want in this article to go over them and show some good alternatives.</p><h2 id=\"org-80acb7ac51\">Gmail</h2><p>This is a tough cookie to get away from. A lot of privacy/GNU/Linux enthusiasts even use gmail. Email is not secure. Go to <a href=\"https://anon.sx\">searx</a>and find out why. So you might be thinking why not use gmail? All your messages go to google&#39;s services as well as using proprietary software just to create a account. Even if you used proprietary software to create it a long time ago and are sitting nicely with a gmail drawer of emails in your email client. Your still having all your emails able to be read by google. That is not fun at all.</p><p>The solution this is using a alternative mail service. There are a couple at the time of posting this article that I think are good.</p><ul><li><p><b>Tormail</b> is some sort of mail service managed in tor. I haven&#39;t used it myself</p></li><li><p><b>Disroot</b> is a public email service. All your emails could be read by disroot but at least disroot isn&#39;t google. So far there aren&#39;t any privacy claims against them.</p></li><li><p><b>matthewevan.xyz</b>. Matthew Evan or MattMadness actually gave me a email that works online and on the phone through a web app. It also should work through a email client. Possibly you can ask him and he will grant you with a awesome email</p></li></ul><h2 id=\"org-181a0d93e0\">Youtube</h2><p>Youtube is terrible and I bet it will be a cause for the death of humanity. I covered out more reasons and how to switch from youtube to something else in this article: <a href=\"https://odysee.com/@trueauracoral:a/do-not-use-youtube:b\">Do not use Youtube.</a></p><h2 id=\"org-024e9091a5\">G Suit</h2><p>Google&#39;s g suit is a set of office tools. A obvious and really great alternative to this is <a href=\"https://[libreoffice\">https://[libreoffice</a> Libreoffice docx exports to g suite products from my experience in the past were good.</p><h2 id=\"org-c9c10b09e0\">Google&#39;s Search Engine</h2><p>Google is named by its search engine. The alternatives to google&#39;s search engine are a LOT.</p><ul><li><p><b>Searx</b>, I made a article on this already on how to set it up: <a href=\"https://zortazert.codeberg.page/Blog/searx.html\">Search Engines (Searx)</a></p></li><li><p><b>SearxNG</b> is searx but more modern looking.</p></li><li><p><b>Whoogle</b> is basicly a google viewer</p></li><li><p><b>DuckDuckGo</b> I only advise using duckduckgo if your on your phone and have no other option.</p></li></ul><h2 id=\"org-4d5863dbe0\">Google maps.</h2><p>The best alternative to it is not <b>waze</b> that is literally also owned by google apparently. The best alternative is openstreetmaps. It for sure isn&#39;t a perfect solution. But at least you will find yourself using googlemaps/waze less.</p><h2 id=\"org-f2eb51f01e\">Chrome Browser</h2><p>There is absolutely no reason to use chrome. https://spyware.neocities.org/articles/chrome.html This article does a great job explaining how bad it is. There are very few browsers left out there that are decent even.</p><ul><li><p><b>Qutebrowser</b> is great with the only downside of it being that you need to know some basic vim keys to use it. However you should be able to just use your mouse for everything.</p></li><li><p><b>Otter-Browser</b> In development but looks awesome</p></li><li><p><b>Ice-cat</b> Best browser ever. Just you may need a regular browser for some things.</p></li></ul><h2 id=\"org-07c2964c41\">Google Drive</h2><p>Nextcloud does a lot of things but primarily its supposed to back up files and be a google alternative. https://github.com/nextcloud/providers Here they show all the public instances, but you can obviously host your own</p><h2 id=\"org-074a33f9ba\">Google Playstore</h2><p>Fdroid is a libre software focused app store for phones.</p><p># * Troler Recommendations# Android Auto# Android OS# - Ubuntu Touch# # Android TV# # Calendar# - Simple Calendar# # Cardboard# # Chrome# - Firefox# # Chrome Enterprise# # Chromebook# - Thinkpad# # Chromecast# # Connected Home# # Contacts# - Simple Contacts# # Digital Wellbeing# - GNU care# # Docs# - LibreOffice# # Drive# - NextCloud# # Earth# # Exposure Notifications# # Finance# # Forms# # Gboard# # Gmail# - Matthewevan.xyz# # Google Alerts# # Google Arts &amp; Culture# # Google Assistant# # Google Authenticator# # Google Chat# # Google Classroom# # Google Duo# - Simple Dialer# # Google Expeditions# # Google Family Link# # Google Fi# # Google Files# - NextCloud# # Google Find My Device# # Google Fit# # Google Flights# # Google Fonts# - Simple Fonts# # Google Groups# # Google Home App# # Google Input Tools# # Google Lens# # Google Meet# # Google One# - NextCloud# # Google Pay# # Google Photos# - Simple Gallery# # Google Play# - F-Droid# # Google Play Books# # Google Play Games# # Google Play Pass# # Google Play Protect# # Google Podcasts# - AntennaPod# # Google Shopping# # Google Street View# # Google TV# # Google Tasks# # Google Workspace# # Hangouts# # Keep# # Maps# - OpenStreet Maps# # Messages# # News# # PhotoScan# # Pixel# # Pixel Buds# # Pixelbook# # Scholar# # Search# # Sheets# # Sites# # Slides# # Snapseed</p><p># Stadia# # Tilt Brush# # Translate# # Travel# # Voice# # Waze# # Wear OS by Google# # YouTube# - Invidious# # YouTube Kids# # YouTube Music# # YouTube TV# # YouTube VR\n                                                                                                             # * Ayyzee Recommendations# Android OS# - Ubuntu Touch# - replicant# # Android TV# - Kodi# - Jellyfin# # Calendar# - Simple Calendar# # Cardboard# - VRCadia# # Chrome# - Firefox# # Chrome Enterprise# # Chromebook# - Thinkpad# - FrameWork# - Librem 15# - System76# # Chromecast# - Raspberry Pi# # Connected Home# - Home Assistant (Open Source Not 100% libre)# # Contacts# - Simple Contacts# # Digital Wellbeing# - GNU care# # Docs# - LibreOffice# # Drive# - NextCloud# - OWNCLOUD# - SFTP# # Earth# - KDE Marble# # Exposure Notifications# # Finance# # Forms# - Nextcloud forms# # Gboard# - FlorisyBoard# # Gmail# - Matthewevan.xyz# # Google Alerts# - notify-send ðŸ¤£# # Google Arts &amp; Culture# # Google Assistant# - Home assistant# # Google Authenticator# - andOTP# # Google Chat# - Matrix# # Google Classroom# - Jitsi# # Google Duo# - Simple Dialer# # Google Expeditions# # Google Family Link# # Google Fi# # Google Files# - NextCloud# # Google Find My Device# - Don&#39;t misplace or lose your device# # Google Fit# - Pen and paper diary# # Google Flights# # Google Fonts# - Simple Fonts# # Google Groups# # Google Home App# # Google Input Tools# # Google Lens# # Google Meet# - Jitsi# # Google One# - NextCloud Hub# # Google Pay# # Google Photos# - Simple Gallery# # Google Play# - F-Droid# # Google Play Books# # Google Play Games# # Google Play Pass# # Google Play Protect# - AppArmor# - SE-Linux# # Google Podcasts# - AntennaPod# # Google Shopping# # Google Street View# # Google TV# # Google Tasks# # Google Workspace# # Hangouts# # Keep# # Maps# - OpenStreet Maps# # Messages# # News# # PhotoScan# # Pixel# # Pixel Buds# # Pixelbook# # Scholar# # Search# # Sheets# # Sites# # Slides# # Snapseed# - GIMP# - RAWTHERAPEE# # Stadia# - VNC ðŸ¤£# # Tilt Brush# # Translate# # Travel# # Voice# # Waze# # Wear OS by Google# # YouTube# - Invidious# - Newpipe# # YouTube Kids# # YouTube Music# # YouTube TV# # YouTube VR</p><h1 id=\"org-6a7b8c9758\">License</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='./images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-9f6704f36d\">Google&#39;s Popularity</h1><p>Google is like a household name to a lot of people that use the computer. For the price of <b>0 DOLLARS</b> the registered account gets access to free email. Email is essential for authenticating accounts, messaging freinds and a lot of things. So you need a email and you just turn to google. </p><p>I remember being super young and someone brought up having a email. Saying:&#34;You can&#39;t make a google account without being over 13!&#34;</p><p>I thought this was strange and wanted to see if this was true. Going to my computer I tried and was locked from making a account, just because I was 8 years old and not 13. What I didn&#39;t know is all the information I just gave to google right the and there. I gave my real birth date, name, last name probably home address. <b>Everything</b>.</p><p>Now imagine this scenario with people actually use the google service.</p><h1 id=\"org-5006d04d6f\">Google&#39;s services</h1><p>With google you get a LOT of services. Each and every one of them is proprietary. Each and everyone of them gives your data to google. I want in this article to go over them and show some good alternatives.</p><h2 id=\"org-80acb7ac51\">Gmail</h2><p>This is a tough cookie to get away from. A lot of privacy/GNU/Linux enthusiasts even use gmail. Email is not secure. Go to <a href=\"https://anon.sx\">searx</a>and find out why. So you might be thinking why not use gmail? All your messages go to google&#39;s services as well as using proprietary software just to create a account. Even if you used proprietary software to create it a long time ago and are sitting nicely with a gmail drawer of emails in your email client. Your still having all your emails able to be read by google. That is not fun at all.</p><p>The solution this is using a alternative mail service. There are a couple at the time of posting this article that I think are good.</p><ul><li><p><b>Tormail</b> is some sort of mail service managed in tor. I haven&#39;t used it myself</p></li><li><p><b>Disroot</b> is a public email service. All your emails could be read by disroot but at least disroot isn&#39;t google. So far there aren&#39;t any privacy claims against them.</p></li><li><p><b>matthewevan.xyz</b>. Matthew Evan or MattMadness actually gave me a email that works online and on the phone through a web app. It also should work through a email client. Possibly you can ask him and he will grant you with a awesome email</p></li></ul><h2 id=\"org-181a0d93e0\">Youtube</h2><p>Youtube is terrible and I bet it will be a cause for the death of humanity. I covered out more reasons and how to switch from youtube to something else in this article: <a href=\"https://odysee.com/@trueauracoral:a/do-not-use-youtube:b\">Do not use Youtube.</a></p><h2 id=\"org-024e9091a5\">G Suit</h2><p>Google&#39;s g suit is a set of office tools. A obvious and really great alternative to this is <a href=\"https://[libreoffice\">https://[libreoffice</a> Libreoffice docx exports to g suite products from my experience in the past were good.</p><h2 id=\"org-c9c10b09e0\">Google&#39;s Search Engine</h2><p>Google is named by its search engine. The alternatives to google&#39;s search engine are a LOT.</p><ul><li><p><b>Searx</b>, I made a article on this already on how to set it up: <a href=\"https://zortazert.codeberg.page/Blog/searx.html\">Search Engines (Searx)</a></p></li><li><p><b>SearxNG</b> is searx but more modern looking.</p></li><li><p><b>Whoogle</b> is basicly a google viewer</p></li><li><p><b>DuckDuckGo</b> I only advise using duckduckgo if your on your phone and have no other option.</p></li></ul><h2 id=\"org-4d5863dbe0\">Google maps.</h2><p>The best alternative to it is not <b>waze</b> that is literally also owned by google apparently. The best alternative is openstreetmaps. It for sure isn&#39;t a perfect solution. But at least you will find yourself using googlemaps/waze less.</p><h2 id=\"org-f2eb51f01e\">Chrome Browser</h2><p>There is absolutely no reason to use chrome. https://spyware.neocities.org/articles/chrome.html This article does a great job explaining how bad it is. There are very few browsers left out there that are decent even.</p><ul><li><p><b>Qutebrowser</b> is great with the only downside of it being that you need to know some basic vim keys to use it. However you should be able to just use your mouse for everything.</p></li><li><p><b>Otter-Browser</b> In development but looks awesome</p></li><li><p><b>Ice-cat</b> Best browser ever. Just you may need a regular browser for some things.</p></li></ul><h2 id=\"org-07c2964c41\">Google Drive</h2><p>Nextcloud does a lot of things but primarily its supposed to back up files and be a google alternative. https://github.com/nextcloud/providers Here they show all the public instances, but you can obviously host your own</p><h2 id=\"org-074a33f9ba\">Google Playstore</h2><p>Fdroid is a libre software focused app store for phones.</p><p># * Troler Recommendations# Android Auto# Android OS# - Ubuntu Touch# # Android TV# # Calendar# - Simple Calendar# # Cardboard# # Chrome# - Firefox# # Chrome Enterprise# # Chromebook# - Thinkpad# # Chromecast# # Connected Home# # Contacts# - Simple Contacts# # Digital Wellbeing# - GNU care# # Docs# - LibreOffice# # Drive# - NextCloud# # Earth# # Exposure Notifications# # Finance# # Forms# # Gboard# # Gmail# - Matthewevan.xyz# # Google Alerts# # Google Arts &amp; Culture# # Google Assistant# # Google Authenticator# # Google Chat# # Google Classroom# # Google Duo# - Simple Dialer# # Google Expeditions# # Google Family Link# # Google Fi# # Google Files# - NextCloud# # Google Find My Device# # Google Fit# # Google Flights# # Google Fonts# - Simple Fonts# # Google Groups# # Google Home App# # Google Input Tools# # Google Lens# # Google Meet# # Google One# - NextCloud# # Google Pay# # Google Photos# - Simple Gallery# # Google Play# - F-Droid# # Google Play Books# # Google Play Games# # Google Play Pass# # Google Play Protect# # Google Podcasts# - AntennaPod# # Google Shopping# # Google Street View# # Google TV# # Google Tasks# # Google Workspace# # Hangouts# # Keep# # Maps# - OpenStreet Maps# # Messages# # News# # PhotoScan# # Pixel# # Pixel Buds# # Pixelbook# # Scholar# # Search# # Sheets# # Sites# # Slides# # Snapseed</p><p># Stadia# # Tilt Brush# # Translate# # Travel# # Voice# # Waze# # Wear OS by Google# # YouTube# - Invidious# # YouTube Kids# # YouTube Music# # YouTube TV# # YouTube VR\n                                                                                                             # * Ayyzee Recommendations# Android OS# - Ubuntu Touch# - replicant# # Android TV# - Kodi# - Jellyfin# # Calendar# - Simple Calendar# # Cardboard# - VRCadia# # Chrome# - Firefox# # Chrome Enterprise# # Chromebook# - Thinkpad# - FrameWork# - Librem 15# - System76# # Chromecast# - Raspberry Pi# # Connected Home# - Home Assistant (Open Source Not 100% libre)# # Contacts# - Simple Contacts# # Digital Wellbeing# - GNU care# # Docs# - LibreOffice# # Drive# - NextCloud# - OWNCLOUD# - SFTP# # Earth# - KDE Marble# # Exposure Notifications# # Finance# # Forms# - Nextcloud forms# # Gboard# - FlorisyBoard# # Gmail# - Matthewevan.xyz# # Google Alerts# - notify-send ðŸ¤£# # Google Arts &amp; Culture# # Google Assistant# - Home assistant# # Google Authenticator# - andOTP# # Google Chat# - Matrix# # Google Classroom# - Jitsi# # Google Duo# - Simple Dialer# # Google Expeditions# # Google Family Link# # Google Fi# # Google Files# - NextCloud# # Google Find My Device# - Don&#39;t misplace or lose your device# # Google Fit# - Pen and paper diary# # Google Flights# # Google Fonts# - Simple Fonts# # Google Groups# # Google Home App# # Google Input Tools# # Google Lens# # Google Meet# - Jitsi# # Google One# - NextCloud Hub# # Google Pay# # Google Photos# - Simple Gallery# # Google Play# - F-Droid# # Google Play Books# # Google Play Games# # Google Play Pass# # Google Play Protect# - AppArmor# - SE-Linux# # Google Podcasts# - AntennaPod# # Google Shopping# # Google Street View# # Google TV# # Google Tasks# # Google Workspace# # Hangouts# # Keep# # Maps# - OpenStreet Maps# # Messages# # News# # PhotoScan# # Pixel# # Pixel Buds# # Pixelbook# # Scholar# # Search# # Sheets# # Sites# # Slides# # Snapseed# - GIMP# - RAWTHERAPEE# # Stadia# - VNC ðŸ¤£# # Tilt Brush# # Translate# # Travel# # Voice# # Waze# # Wear OS by Google# # YouTube# - Invidious# - Newpipe# # YouTube Kids# # YouTube Music# # YouTube TV# # YouTube VR</p><h1 id=\"org-6a7b8c9758\">License</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='./images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-12-16T09:06:23.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/python-thumbnails.html",
      "url": "https://zortazert.codeberg.page/Blog/python-thumbnails.html",
      "title": "Python Thumbnails.",
      "content_html": "<h1 id=\"org-dd8082be77\">What is this?</h1><p>This is a script for me to generate video thumbnails for none videopublications. I am way to lazy to create thumbnails so this justdoes it automaticly.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Python image processing imports. Handling text and other things.</span><span class=\"kn\">from</span> <span class=\"nn\">PIL</span> <span class=\"kn\">import</span> <span class=\"n\">Image</span><span class=\"p\">,</span> <span class=\"n\">ImageDraw</span><span class=\"p\">,</span> <span class=\"n\">ImageFont</span><span class=\"c1\"># This if for text wrapping. Using \\n isn&#39;t supported in PIL text</span><span class=\"c1\"># stuff.</span><span class=\"kn\">import</span> <span class=\"nn\">textwrap</span></pre></div><h1 id=\"org-b45c1290ec\">Open the image</h1><p>In a directory I store <code>background.png</code> here I just open it so I can manipulate it.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Image open and draw</span><span class=\"n\">image</span> <span class=\"o\">=</span> <span class=\"n\">Image</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;background.png&quot;</span><span class=\"p\">)</span><span class=\"n\">draw</span> <span class=\"o\">=</span> <span class=\"n\">ImageDraw</span><span class=\"o\">.</span><span class=\"n\">Draw</span><span class=\"p\">(</span><span class=\"n\">image</span><span class=\"p\">)</span></pre></div><h1 id=\"org-47ff824313\">Add the text</h1><p>Ask for input, run it through text wrap, specify a font I have in the directory and finally put it on the image.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Text</span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Text: &#39;</span><span class=\"p\">)</span><span class=\"n\">textwrapped</span> <span class=\"o\">=</span> <span class=\"n\">textwrap</span><span class=\"o\">.</span><span class=\"n\">wrap</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">width</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span><span class=\"n\">dubai</span> <span class=\"o\">=</span> <span class=\"n\">ImageFont</span><span class=\"o\">.</span><span class=\"n\">truetype</span><span class=\"p\">(</span><span class=\"s2\">&quot;ReemKufi-Regular.ttf&quot;</span><span class=\"p\">,</span> <span class=\"mi\">100</span><span class=\"p\">)</span><span class=\"n\">draw</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">((</span><span class=\"mi\">400</span><span class=\"p\">,</span><span class=\"mi\">400</span><span class=\"p\">),</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">textwrapped</span><span class=\"p\">),</span> <span class=\"n\">font</span><span class=\"o\">=</span><span class=\"n\">dubai</span><span class=\"p\">,</span> <span class=\"n\">fill</span><span class=\"o\">=</span><span class=\"s2\">&quot;#EE7A2F&quot;</span><span class=\"p\">)</span></pre></div><h1 id=\"org-3f466cc38e\">Saving it</h1><p>I do some manipulation on the text variable so I get a nicer file name.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-&#39;</span><span class=\"p\">)</span><span class=\"o\">+</span><span class=\"s2\">&quot;.png&quot;</span><span class=\"n\">image</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"s2\">&quot;PNG&quot;</span><span class=\"p\">)</span><span class=\"n\">image</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span></pre></div><h1 id=\"org-20ba3eccda\">Codeberg link</h1><p>https://codeberg.org/zortazert/Python-Projects/src/branch/main/thumbnail</p><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-dd8082be77\">What is this?</h1><p>This is a script for me to generate video thumbnails for none videopublications. I am way to lazy to create thumbnails so this justdoes it automaticly.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Python image processing imports. Handling text and other things.</span><span class=\"kn\">from</span> <span class=\"nn\">PIL</span> <span class=\"kn\">import</span> <span class=\"n\">Image</span><span class=\"p\">,</span> <span class=\"n\">ImageDraw</span><span class=\"p\">,</span> <span class=\"n\">ImageFont</span><span class=\"c1\"># This if for text wrapping. Using \\n isn&#39;t supported in PIL text</span><span class=\"c1\"># stuff.</span><span class=\"kn\">import</span> <span class=\"nn\">textwrap</span></pre></div><h1 id=\"org-b45c1290ec\">Open the image</h1><p>In a directory I store <code>background.png</code> here I just open it so I can manipulate it.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Image open and draw</span><span class=\"n\">image</span> <span class=\"o\">=</span> <span class=\"n\">Image</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;background.png&quot;</span><span class=\"p\">)</span><span class=\"n\">draw</span> <span class=\"o\">=</span> <span class=\"n\">ImageDraw</span><span class=\"o\">.</span><span class=\"n\">Draw</span><span class=\"p\">(</span><span class=\"n\">image</span><span class=\"p\">)</span></pre></div><h1 id=\"org-47ff824313\">Add the text</h1><p>Ask for input, run it through text wrap, specify a font I have in the directory and finally put it on the image.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Text</span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Text: &#39;</span><span class=\"p\">)</span><span class=\"n\">textwrapped</span> <span class=\"o\">=</span> <span class=\"n\">textwrap</span><span class=\"o\">.</span><span class=\"n\">wrap</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">width</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span><span class=\"n\">dubai</span> <span class=\"o\">=</span> <span class=\"n\">ImageFont</span><span class=\"o\">.</span><span class=\"n\">truetype</span><span class=\"p\">(</span><span class=\"s2\">&quot;ReemKufi-Regular.ttf&quot;</span><span class=\"p\">,</span> <span class=\"mi\">100</span><span class=\"p\">)</span><span class=\"n\">draw</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">((</span><span class=\"mi\">400</span><span class=\"p\">,</span><span class=\"mi\">400</span><span class=\"p\">),</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">textwrapped</span><span class=\"p\">),</span> <span class=\"n\">font</span><span class=\"o\">=</span><span class=\"n\">dubai</span><span class=\"p\">,</span> <span class=\"n\">fill</span><span class=\"o\">=</span><span class=\"s2\">&quot;#EE7A2F&quot;</span><span class=\"p\">)</span></pre></div><h1 id=\"org-3f466cc38e\">Saving it</h1><p>I do some manipulation on the text variable so I get a nicer file name.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-&#39;</span><span class=\"p\">)</span><span class=\"o\">+</span><span class=\"s2\">&quot;.png&quot;</span><span class=\"n\">image</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"s2\">&quot;PNG&quot;</span><span class=\"p\">)</span><span class=\"n\">image</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span></pre></div><h1 id=\"org-20ba3eccda\">Codeberg link</h1><p>https://codeberg.org/zortazert/Python-Projects/src/branch/main/thumbnail</p><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2021-12-28T19:59:54.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/gimp-hot-keys.html",
      "url": "https://zortazert.codeberg.page/Blog/gimp-hot-keys.html",
      "title": "Gimp Hot Keys.",
      "content_html": "<p>Consume this in any software you like!</p>",
      "summary": "<p>Consume this in any software you like!</p>",
      "date_published": "2021-12-31T10:15:08.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/fediverse.html",
      "url": "https://zortazert.codeberg.page/Blog/fediverse.html",
      "title": "Fediverse Review.",
      "content_html": "<h1 id=\"org-600b7bf711\">What is the fediverse?</h1><p>The fediverse is a lot of software such as <a href=\"https://en.wikipedia.org/wiki/Mastodon_(software)\">Mastodon</a> <a href=\"https://en.wikipedia.org/wiki/PeerTube\">peertube</a>and a lot more I will try and cover my experiences with different federation software I have used in this article. I find a new one of them everyday.</p><p>All of these federation programs have one thing in common, there are multiple servers that run the software independently from each other. Yet they still access one another as <b>one</b>. Let&#39;s say a peertube self hosted instance https://tube.tchncs.de is really cool with all of it&#39;s creators and content but finds out about a another peertube instance called https://diode.zone. Imediatly https://tube.tchncs.de maintainer can let the instance on the front page and other parts of the website show videos from https://diode.zone. Useres on https://tube.tchncs.de can like, dislike, comment, view and do everything they want even though https://diode.zone is a completely different server then https://tube.tchncs.de. <b>But</b> let&#39;s say https://diode.zone stops moderation and now porn is overflooding the instance. Uh oh you might think! The server maintainer of https://tube.tchncs.de may not like that so he decides to immediatly close connections to https://diode.zone and continue to connect to other instances he likes. Now this isn&#39;t even to say that a user on https://tube.tchncs.de can still visit https://diode.zone and watch videos and interact with there https://tube.tchncs.de account. Maybe your not a consumer but actually a content creator and are posting NSFW or highly mythical, not accepting of the <a href=\"https://en.wikipedia.org/wiki/Flying_Spaghetti_Monster\">flying sphageti monster</a>type of content. On peertube all you got to do is find a instance and read one that let&#39;s you post whatever the hell you want and now you get to enjoy content posting freedome.</p><p>As you can see this federation stuff is <b>awesome</b>. It has been adapted for all forms of social media of any kind. It&#39;s so powerfule. No user can hate the platform because they get banned and multiple server owners are in control not just <b>one</b> big corporation like google for YouTube. So hopefully you get my explination. <a href=\"https://en.wikipedia.org/wiki/PeerTube\">PeerTube</a>is not the only fediverse thing out there. There are multiple others and I would like to talk about all that I know of.</p><h1 id=\"org-8461ca79d4\">Peertube</h1><p>PeerTube as the name suggest&#39;s is similar in a way to something like YouTube. Just really nail&#39;s down on the <b>You</b> part. It&#39;s a video platform which can do anything that youtube can in a more minimal and privacy respecting way.</p><ul><li><p>Upload videos</p></li><li><p>Upload livestreams</p></li><li><p>Upload whatever you want (Have to find a instance, but <b>yes</b>)</p></li><li><p>Like/dislike</p></li><li><p>Comments</p></li></ul><p>There are also a lot of cool content creators on it. A lot of them not really well known but still make super cool stuff. Not just about tech or GNU/Linux.</p><h2 id=\"org-f9d99d6e69\">Bad things:</h2><p>From user experience I would say it looks really scarry, but don&#39;t be scared. I am pretty sure that if you can read this article you have enouph ability to use peertube ;)</p><p>I can not find a easy way to do publishing with it without actual software. However I believe they are not as much of a spyware like <a href=\"https://lbry.ix.tc\">odysee.com</a>is.</p><h1 id=\"org-0f28eeb820\">Matrix</h1><p>Is definitely a known in the category of FOSS chat clients as a great alternative to whatsapp, discord, skype and facebook/twiter messanger. Matrix is a federation software that handles many things:</p><ul><li><p>Joining rooms</p></li><li><p>Reaction emoticons</p></li><li><p>Replies</p></li><li><p>Creating chat messages</p></li><li><p>Groups/Spaces (Multiple chat rooms packaged together)</p></li><li><p>Mentioning users</p></li><li><p>Private chat</p></li><li><p><b>MULTIPLE CLIENTS</b></p></li></ul><p>So matrix has everything. Maybe, your in a touph situation where you need to use a properietary software for chatting. Most likely there is a way for you to mirror the messages from the proprietary chat thing to matrix. You would just need to talk to the chat room owner if you can put in a bot there for the mirror.</p><p>Another thing that matrix has is a <b>lot</b> of clients. You can deffinitly find a client that you like, suits your needs and is FOSS software. One thing to keep in mind that maybe you wouldn&#39;t think of if you used proprietary chat stuff before is that everything you send in a room is <b>public</b>. Anyone can grab out there screenshot tool or camera and take a snap at your message. However, this is not the case in private chats, since <b>encryption</b> and the person your chatting to you probably trust not to leak stuff you send. </p><h2 id=\"org-1d917bee93\">Bad things</h2><p>There are not a lot of none JS bloatware matrix clients. I geuss you don&#39;t need to care about how bloated a FOSS peice of software like matrix is. But I think it&#39;s nice to have a more minimal client. Minimal clients that I know of are:</p><ul><li><p>Quaternion</p></li><li><p>Gomuks</p></li><li><p>Matrixcli</p></li><li><p>Neochat</p></li><li><p>Mirage</p></li><li><p>Nheko</p></li><li><p>Ement (emacs)</p></li></ul><p>Plenty to choose from but most all of them have there issues.</p><h1 id=\"org-44b0b0abeb\">Mastodon/Pleroma</h1><p>Mastodon/Pleroma are a alternative to something like twitter or maybe in some cases reddit. They are both practically the same it&#39;s just Mastodon forces you to have a smaller character limit. I think this has the benefits of helping yourself make sure to be really concise with what your talking about. I think of Mastodon/Pleroma as a place to discuss certain topics in a organized way and also a place to notify people about what your doing in life. Mastodon/Pleroma is are two really great peaces of software that work really well together and by themselves and other instances or stuff on federation. There is truly no excuse for people to continue using twitter. (I can&#39;t think of one)</p><h2 id=\"org-490b406766\">Clients</h2><p>You can obviously use whatever your instance that you chose uses in your web browser. But that&#39;s really not cool and bloated. I would rather have my own app on my machine that I control. I also don&#39;t want it to be bloated javascript.</p><p>The options from what I understand are not that many but okay. NOTE: I can not guarantee that all these work on pleroma. Most likely they do. If they don&#39;t and you use pleroma consider reporting a issue on there repo asking for support :)</p><ul><li><p>Toot (A python package for doing all things on mastodon.)</p></li><li><p>Mastodon.el (A mastodon/pleroma package for emacs.)</p></li><li><p>BloatFE (Runs in browser but is very lightweight.)</p></li></ul><h2 id=\"org-c3b733dae3\">My video &#34;Use Mastodon/Pleroma!&#34;</h2><p><a href=\"https://tube.tchncs.de/w/fXS18zwhRBzPo1VkmJRamg\">Peertube</a> <a href=\"https://lbry.ix.tc/@trueauracoral:a/Use-Mastodon:2\">librarian</a></p><h1 id=\"org-7b7bef0434\">Invidious</h1><p>Invidious is a very plain topic. The software works well and <b>you</b> should use it!</p><h2 id=\"org-925d463670\">My video &#34;Use Invidious!&#34;</h2><p><a href=\"https://tube.tchncs.de/w/e9MmjxwqnR7RnFaYtVueWg\">Peertube</a> <a href=\"https://lbry.ix.tc/@trueauracoral:a/Use-Invidious%21:1\">librarian</a></p><h1 id=\"org-5a5e946881\">Plume</h1><p>Plume is a MD article posting place. It is supposed to work, I have a account there but it&#39;s not letting me post articles without shrinking them into one big line. Other people have it all working. It seems like plume is still in early development. One day I think it will be really good. For now it&#39;s usable but you may have issues with it.</p><h1 id=\"org-0d6ca096d9\">Fchan</h1><p>Fchan is another software that&#39;s a bit early in development but it definitely works! It is a FOSS image board that looks a lot like 4chan. It works well it&#39;s just lacking in users. I asked 4chan why there still on proprietary 4chan, they said &#34;All my friends are on it!&#34; 4chan even decided to close the post! Absolutely horrible! Go use fchan (Fedderated channels).</p><h1 id=\"org-6a7b8c9758\">License</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-600b7bf711\">What is the fediverse?</h1><p>The fediverse is a lot of software such as <a href=\"https://en.wikipedia.org/wiki/Mastodon_(software)\">Mastodon</a> <a href=\"https://en.wikipedia.org/wiki/PeerTube\">peertube</a>and a lot more I will try and cover my experiences with different federation software I have used in this article. I find a new one of them everyday.</p><p>All of these federation programs have one thing in common, there are multiple servers that run the software independently from each other. Yet they still access one another as <b>one</b>. Let&#39;s say a peertube self hosted instance https://tube.tchncs.de is really cool with all of it&#39;s creators and content but finds out about a another peertube instance called https://diode.zone. Imediatly https://tube.tchncs.de maintainer can let the instance on the front page and other parts of the website show videos from https://diode.zone. Useres on https://tube.tchncs.de can like, dislike, comment, view and do everything they want even though https://diode.zone is a completely different server then https://tube.tchncs.de. <b>But</b> let&#39;s say https://diode.zone stops moderation and now porn is overflooding the instance. Uh oh you might think! The server maintainer of https://tube.tchncs.de may not like that so he decides to immediatly close connections to https://diode.zone and continue to connect to other instances he likes. Now this isn&#39;t even to say that a user on https://tube.tchncs.de can still visit https://diode.zone and watch videos and interact with there https://tube.tchncs.de account. Maybe your not a consumer but actually a content creator and are posting NSFW or highly mythical, not accepting of the <a href=\"https://en.wikipedia.org/wiki/Flying_Spaghetti_Monster\">flying sphageti monster</a>type of content. On peertube all you got to do is find a instance and read one that let&#39;s you post whatever the hell you want and now you get to enjoy content posting freedome.</p><p>As you can see this federation stuff is <b>awesome</b>. It has been adapted for all forms of social media of any kind. It&#39;s so powerfule. No user can hate the platform because they get banned and multiple server owners are in control not just <b>one</b> big corporation like google for YouTube. So hopefully you get my explination. <a href=\"https://en.wikipedia.org/wiki/PeerTube\">PeerTube</a>is not the only fediverse thing out there. There are multiple others and I would like to talk about all that I know of.</p><h1 id=\"org-8461ca79d4\">Peertube</h1><p>PeerTube as the name suggest&#39;s is similar in a way to something like YouTube. Just really nail&#39;s down on the <b>You</b> part. It&#39;s a video platform which can do anything that youtube can in a more minimal and privacy respecting way.</p><ul><li><p>Upload videos</p></li><li><p>Upload livestreams</p></li><li><p>Upload whatever you want (Have to find a instance, but <b>yes</b>)</p></li><li><p>Like/dislike</p></li><li><p>Comments</p></li></ul><p>There are also a lot of cool content creators on it. A lot of them not really well known but still make super cool stuff. Not just about tech or GNU/Linux.</p><h2 id=\"org-f9d99d6e69\">Bad things:</h2><p>From user experience I would say it looks really scarry, but don&#39;t be scared. I am pretty sure that if you can read this article you have enouph ability to use peertube ;)</p><p>I can not find a easy way to do publishing with it without actual software. However I believe they are not as much of a spyware like <a href=\"https://lbry.ix.tc\">odysee.com</a>is.</p><h1 id=\"org-0f28eeb820\">Matrix</h1><p>Is definitely a known in the category of FOSS chat clients as a great alternative to whatsapp, discord, skype and facebook/twiter messanger. Matrix is a federation software that handles many things:</p><ul><li><p>Joining rooms</p></li><li><p>Reaction emoticons</p></li><li><p>Replies</p></li><li><p>Creating chat messages</p></li><li><p>Groups/Spaces (Multiple chat rooms packaged together)</p></li><li><p>Mentioning users</p></li><li><p>Private chat</p></li><li><p><b>MULTIPLE CLIENTS</b></p></li></ul><p>So matrix has everything. Maybe, your in a touph situation where you need to use a properietary software for chatting. Most likely there is a way for you to mirror the messages from the proprietary chat thing to matrix. You would just need to talk to the chat room owner if you can put in a bot there for the mirror.</p><p>Another thing that matrix has is a <b>lot</b> of clients. You can deffinitly find a client that you like, suits your needs and is FOSS software. One thing to keep in mind that maybe you wouldn&#39;t think of if you used proprietary chat stuff before is that everything you send in a room is <b>public</b>. Anyone can grab out there screenshot tool or camera and take a snap at your message. However, this is not the case in private chats, since <b>encryption</b> and the person your chatting to you probably trust not to leak stuff you send. </p><h2 id=\"org-1d917bee93\">Bad things</h2><p>There are not a lot of none JS bloatware matrix clients. I geuss you don&#39;t need to care about how bloated a FOSS peice of software like matrix is. But I think it&#39;s nice to have a more minimal client. Minimal clients that I know of are:</p><ul><li><p>Quaternion</p></li><li><p>Gomuks</p></li><li><p>Matrixcli</p></li><li><p>Neochat</p></li><li><p>Mirage</p></li><li><p>Nheko</p></li><li><p>Ement (emacs)</p></li></ul><p>Plenty to choose from but most all of them have there issues.</p><h1 id=\"org-44b0b0abeb\">Mastodon/Pleroma</h1><p>Mastodon/Pleroma are a alternative to something like twitter or maybe in some cases reddit. They are both practically the same it&#39;s just Mastodon forces you to have a smaller character limit. I think this has the benefits of helping yourself make sure to be really concise with what your talking about. I think of Mastodon/Pleroma as a place to discuss certain topics in a organized way and also a place to notify people about what your doing in life. Mastodon/Pleroma is are two really great peaces of software that work really well together and by themselves and other instances or stuff on federation. There is truly no excuse for people to continue using twitter. (I can&#39;t think of one)</p><h2 id=\"org-490b406766\">Clients</h2><p>You can obviously use whatever your instance that you chose uses in your web browser. But that&#39;s really not cool and bloated. I would rather have my own app on my machine that I control. I also don&#39;t want it to be bloated javascript.</p><p>The options from what I understand are not that many but okay. NOTE: I can not guarantee that all these work on pleroma. Most likely they do. If they don&#39;t and you use pleroma consider reporting a issue on there repo asking for support :)</p><ul><li><p>Toot (A python package for doing all things on mastodon.)</p></li><li><p>Mastodon.el (A mastodon/pleroma package for emacs.)</p></li><li><p>BloatFE (Runs in browser but is very lightweight.)</p></li></ul><h2 id=\"org-c3b733dae3\">My video &#34;Use Mastodon/Pleroma!&#34;</h2><p><a href=\"https://tube.tchncs.de/w/fXS18zwhRBzPo1VkmJRamg\">Peertube</a> <a href=\"https://lbry.ix.tc/@trueauracoral:a/Use-Mastodon:2\">librarian</a></p><h1 id=\"org-7b7bef0434\">Invidious</h1><p>Invidious is a very plain topic. The software works well and <b>you</b> should use it!</p><h2 id=\"org-925d463670\">My video &#34;Use Invidious!&#34;</h2><p><a href=\"https://tube.tchncs.de/w/e9MmjxwqnR7RnFaYtVueWg\">Peertube</a> <a href=\"https://lbry.ix.tc/@trueauracoral:a/Use-Invidious%21:1\">librarian</a></p><h1 id=\"org-5a5e946881\">Plume</h1><p>Plume is a MD article posting place. It is supposed to work, I have a account there but it&#39;s not letting me post articles without shrinking them into one big line. Other people have it all working. It seems like plume is still in early development. One day I think it will be really good. For now it&#39;s usable but you may have issues with it.</p><h1 id=\"org-0d6ca096d9\">Fchan</h1><p>Fchan is another software that&#39;s a bit early in development but it definitely works! It is a FOSS image board that looks a lot like 4chan. It works well it&#39;s just lacking in users. I asked 4chan why there still on proprietary 4chan, they said &#34;All my friends are on it!&#34; 4chan even decided to close the post! Absolutely horrible! Go use fchan (Fedderated channels).</p><h1 id=\"org-6a7b8c9758\">License</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2022-01-12T10:41:21.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/python-vids.html",
      "url": "https://zortazert.codeberg.page/Blog/python-vids.html",
      "title": "Vids script for Peertube, LBRY and Invidious",
      "content_html": "<h1 id=\"org-600c2313c3\">What is this script?</h1><p>Script for searching YouTube through the invidious API, LBRY throughlighthouse API and peertube through the SepiaSearch API. Played withmpv</p><h1 id=\"org-2d88c63774\">Imports</h1><ul><li><p><code>requests</code> for fetching data from API&#39;s</p></li><li><p><code>json</code> for making json better</p></li><li><p><code>os</code> for launching mpv</p></li></ul><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">requests</span><span class=\"kn\">import</span> <span class=\"nn\">json</span><span class=\"kn\">import</span> <span class=\"nn\">os</span><span class=\"kn\">import</span> <span class=\"nn\">sys</span></pre></div><h1 id=\"org-882243a8d5\">Banner</h1><p>This is not at all necasary but I think it makes the script more fun</p><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"s1\">/-------------------------------</span><span class=\"se\">\\\\</span><span class=\"s1\"></span><span class=\"s1\">|             vids              |</span><span class=\"se\">\\\\</span><span class=\"s1\">-------------------------------/</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"p\">)</span></pre></div><h1 id=\"org-cb4d4443fe\">Variables</h1><ul><li><p><code>command</code> What the video link will get launched in most likely MPV or a browser</p></li></ul><p>The colors aren&#39;t organized well there just different python color codes. All terminals are configured differently making colors show not always perfect. Better than no color I think.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Use either a browser or mpv</span><span class=\"n\">command</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;mpv &quot;</span><span class=\"n\">bold</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[01m&quot;</span><span class=\"n\">norm</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[00m&quot;</span><span class=\"n\">bright_cyan</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[46m&quot;</span><span class=\"n\">colora</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[45m&quot;</span><span class=\"n\">colorb</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[44m&quot;</span></pre></div><h1 id=\"org-549165ac69\">Invidious search</h1><p>The first thing that happens is this script is put in a <code>try</code> function, if a argument is given to the script e.g. <code>-i</code> it will start doing things with it. If no, it will print out the banner.</p><p>The if statement detects if by <code>sys.argv[1]</code> value if it&#39;s <code>-i</code>. The invidious_instance is set and can be changed to a invidious instance that I like.</p><p>The <code>try</code> and <code>except</code> statement checks to see if possibly the user did a command like:</p><p><code>python vids.py -i &#34;search query&#34;</code></p><p>if they didn&#39;t give that 2nd argument of the search it will just prompt them.</p><div class=\"highlight\"><pre><span></span><span class=\"k\">try</span><span class=\"p\">:</span>    <span class=\"k\">if</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-i&quot;</span><span class=\"p\">:</span>        <span class=\"n\">invidious_instance</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://invidio.xamh.de/&quot;</span>        <span class=\"k\">try</span><span class=\"p\">:</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>        <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span></pre></div><h1 id=\"org-0cd60fed9b\">Print out search results</h1><p>Using the invidious search API we fetch the search results and print them out numbered in a for loop.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">19</span><span class=\"p\">)</span><span class=\"n\">invidious_search</span> <span class=\"o\">=</span> <span class=\"n\">invidious_instance</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;api/v1/search?q=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">query</span><span class=\"n\">wol_api</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://scrap.madiator.com/api/get-lbry-video?url=&quot;</span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">invidious_search</span><span class=\"p\">)</span><span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">vid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">):</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span></pre></div><h1 id=\"org-af615ff53b\">Pick a search result</h1><p>This while loop asks the user for a video they want to play and see the comments of. Storing the number they give in a variable so that later it can be used when parsing the json for specific stuff. The reason for a while loop with the special argument is to keep prompting the user over and over to pick the result. It has to be either greater than or equal to <b>0</b> or less than or equal to <b>19</b>.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">19</span><span class=\"p\">:</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>    <span class=\"k\">try</span><span class=\"p\">:</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>    <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span></pre></div><h1 id=\"org-5810ab072d\">Comments</h1><p>Using the invidious comment api we fetch the comments of a video with the videoId, there maybe a <b>error</b> in the resulting json, most likely because there are no comments. Because of this the if statement prints <code>could not fetch comments</code>.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">invidious_instance</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/api/v1/comments/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"n\">data_comment</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"p\">)</span><span class=\"n\">json_comment</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_comment</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">if</span> <span class=\"s2\">&quot;error&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">json_comment</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;could not fetch comments&quot;</span><span class=\"p\">)</span><span class=\"k\">else</span><span class=\"p\">:</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">comment</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;comments&quot;</span><span class=\"p\">]):</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;content&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span></pre></div><h1 id=\"org-0e9c176403\">WOL-api check</h1><p>Using the WOL-API we can check if the video is available on LBRY and play with mpv from a odysee.com link over using youtube/invidious. If the lbry check gave <code>null</code> or what python calls it <code>None</code>, the link will be a youtube link, since it&#39;s what yt-dlp uses anyways. If the lbry check gave a value that&#39;s a lbry url it will play with mpv a odysee link.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># wol-api check</span><span class=\"n\">lbry_check</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">wol_api</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">])</span><span class=\"n\">lbry_check</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">lbry_check</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"c1\"># For now using odysee because yt-dlp doesn&#39;t support librarian</span><span class=\"n\">librarian_instance</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://odysee.com/&quot;</span><span class=\"k\">if</span> <span class=\"n\">lbry_check</span><span class=\"p\">[</span><span class=\"s2\">&quot;lbryurl&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>    <span class=\"c1\"># Using youtube.com since yt-dlp on any given invidious url redirects to youtube.com anyways.</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://youtube.com/watch?v=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"k\">else</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Playing with LBRY!&quot;</span><span class=\"p\">)</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">librarian_instance</span> <span class=\"o\">+</span> <span class=\"n\">lbry_check</span><span class=\"p\">[</span><span class=\"s2\">&quot;lbryurl&quot;</span><span class=\"p\">]</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</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></pre></div><h1 id=\"org-a336556cc0\">Launch in MPV!</h1><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Do stuff with it.</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">)</span><span class=\"n\">quit</span><span class=\"p\">()</span></pre></div><h1 id=\"org-8461ca79d4\">Peertube</h1><p>A lot of what I discussed in the invidious part of the script applies to the PeerTube part, there are just different values and API&#39;s that are worked with.</p><div class=\"highlight\"><pre><span></span><span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-p&quot;</span><span class=\"p\">:</span>    <span class=\"k\">try</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>    <span class=\"k\">except</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>    <span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">19</span><span class=\"p\">)</span>    <span class=\"n\">search</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://sepiasearch.org/api/v1/search/videos?search=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">query</span>    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">search</span><span class=\"p\">)</span>    <span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">vid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]):</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>    <span class=\"c1\"># Choose a result</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span>    <span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">19</span><span class=\"p\">:</span>        <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>        <span class=\"k\">try</span><span class=\"p\">:</span>                <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>        <span class=\"k\">except</span><span class=\"p\">:</span>\n      <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">]</span></pre></div><h1 id=\"org-1e0a5210b5\">PeerTube Comments</h1><p>This is a lot of work in progress code, it&#39;s very inefficient and only acompleshes:</p><ul><li><p>Printing out comments</p></li><li><p>Detect if a video has replies</p><ul><li><p>Tell how many replies</p></li></ul></li><li><p>Print just <b>1</b> of those replies</p></li><li><p>Detect if one of the json groups is a deleted comment and if so <code>pass</code> and don&#39;t deal with it.</p></li></ul><div class=\"highlight\"><pre><span></span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;host&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/api/v1/videos/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/comment-threads/&quot;</span><span class=\"n\">data_comment</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"p\">)</span><span class=\"n\">json_comment</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_comment</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"c1\"># PRINT COMMENTS!</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">comment</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]):</span>    <span class=\"c1\"># Sometimes peertube likes to give nonsese json</span>    <span class=\"k\">if</span> <span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>        <span class=\"k\">pass</span>    <span class=\"c1\"># This detects if a comment has replies.</span>    <span class=\"k\">elif</span> <span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;totalReplies&quot;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>        <span class=\"n\">replies</span> <span class=\"o\">=</span> <span class=\"n\">comments</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">])</span>        <span class=\"n\">data_replies</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">replies</span><span class=\"p\">)</span>        <span class=\"n\">json_replies</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_replies</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>        <span class=\"n\">total_replies</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">json_replies</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;totalReplies&quot;</span><span class=\"p\">])</span>        <span class=\"c1\"># Print out that this comment has replies and also say how many</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"o\">+</span><span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">REPLIES: &quot;</span><span class=\"o\">+</span><span class=\"n\">total_replies</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>        <span class=\"c1\"># Here in this for loop inside of a for loop for replys</span>        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">reply</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_replies</span><span class=\"p\">[</span><span class=\"s2\">&quot;children&quot;</span><span class=\"p\">]):</span>            <span class=\"c1\"># Same thing can happen where it gives nonsense json.</span>            <span class=\"k\">if</span> <span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>                <span class=\"k\">pass</span>            <span class=\"c1\"># This prints out the first reply.</span>            <span class=\"k\">else</span><span class=\"p\">:</span>                <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>    <span class=\"c1\"># This is the final thing, the comment has no replys so it just</span>    <span class=\"c1\"># prints it as a comment.</span>    <span class=\"k\">else</span><span class=\"p\">:</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">)</span></pre></div><h1 id=\"org-ceea0ba3af\">LBRY</h1><p>This section is for LBRY, and printing out the search results of the search. </p><div class=\"highlight\"><pre><span></span><span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-l&quot;</span><span class=\"p\">:</span>    <span class=\"k\">try</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>    <span class=\"k\">except</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>    <span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span>    <span class=\"n\">search</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://lighthouse.lbry.com/search?s=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">query</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;include=channel,channel_claim_id,title&amp;size=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span>    <span class=\"n\">lbry</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://lbry.ix.tc/&quot;</span>    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">search</span><span class=\"p\">)</span>    <span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>    <span class=\"c1\"># Results</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">):</span>        <span class=\"n\">pre</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;lbry://&quot;</span>        <span class=\"k\">if</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]:</span>            <span class=\"n\">pre</span> <span class=\"o\">+=</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/&quot;</span>        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">pre</span> <span class=\"o\">+</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">url</span><span class=\"p\">)</span></pre></div><h1 id=\"org-8e0920166d\">LBRY comments</h1><p>Using the librarian comment api after gathering a lot of information about the publication it is possible to get the comments.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Choose a result</span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">29</span><span class=\"p\">:</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>    <span class=\"k\">try</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>    <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">]</span><span class=\"c1\"># Do stuff with it.</span><span class=\"n\">channel_name</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span><span class=\"n\">channel_ID</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel_claim_id&quot;</span><span class=\"p\">]</span><span class=\"n\">claim_ID</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;claimId&quot;</span><span class=\"p\">]</span><span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">lbry</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;api/comments?claim_id=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">claim_ID</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;channel_id=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">channel_ID</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;channel_name=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">channel_name</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;page=1&amp;page_size=15&quot;</span><span class=\"p\">)</span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span><span class=\"n\">json_comments</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comments</span><span class=\"p\">[</span><span class=\"s2\">&quot;comments&quot;</span><span class=\"p\">]):</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;Channel&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;Name&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;Comment&quot;</span><span class=\"p\">])</span><span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://odysee.com/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">url</span><span class=\"p\">)</span><span class=\"n\">quit</span><span class=\"p\">()</span></pre></div><h1 id=\"org-d902e2edc8\">HELP</h1><p>Using the -h argument the user can get some help aobut how to use the program.</p><div class=\"highlight\"><pre><span></span>    <span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-h&quot;</span><span class=\"p\">:</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"s1\">Command:</span><span class=\"s1\">python vids.py &lt;arg&gt;</span><span class=\"s1\">After doing this you will be prompted to make a search</span><span class=\"s1\">If you want you can make the search in the command by doing</span><span class=\"s1\">python vids.py &lt;arg&gt; &quot;search&quot;</span><span class=\"s1\">-l for lighthouse (LBRY network)</span><span class=\"s1\">-p for sepia (Peertube)</span><span class=\"s1\">-i for invidious) (YouTube) </span><span class=\"s1\">NOTE: All youtube links will be checked with the Watch on LBRY API. If</span><span class=\"s1\">the video is available on the lbry network, the youtube search result</span><span class=\"s1\">will be opened in a odysee.com link.</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"p\">)</span><span class=\"k\">except</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span></pre></div><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-600c2313c3\">What is this script?</h1><p>Script for searching YouTube through the invidious API, LBRY throughlighthouse API and peertube through the SepiaSearch API. Played withmpv</p><h1 id=\"org-2d88c63774\">Imports</h1><ul><li><p><code>requests</code> for fetching data from API&#39;s</p></li><li><p><code>json</code> for making json better</p></li><li><p><code>os</code> for launching mpv</p></li></ul><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">requests</span><span class=\"kn\">import</span> <span class=\"nn\">json</span><span class=\"kn\">import</span> <span class=\"nn\">os</span><span class=\"kn\">import</span> <span class=\"nn\">sys</span></pre></div><h1 id=\"org-882243a8d5\">Banner</h1><p>This is not at all necasary but I think it makes the script more fun</p><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"s1\">/-------------------------------</span><span class=\"se\">\\\\</span><span class=\"s1\"></span><span class=\"s1\">|             vids              |</span><span class=\"se\">\\\\</span><span class=\"s1\">-------------------------------/</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"p\">)</span></pre></div><h1 id=\"org-cb4d4443fe\">Variables</h1><ul><li><p><code>command</code> What the video link will get launched in most likely MPV or a browser</p></li></ul><p>The colors aren&#39;t organized well there just different python color codes. All terminals are configured differently making colors show not always perfect. Better than no color I think.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Use either a browser or mpv</span><span class=\"n\">command</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;mpv &quot;</span><span class=\"n\">bold</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[01m&quot;</span><span class=\"n\">norm</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[00m&quot;</span><span class=\"n\">bright_cyan</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[46m&quot;</span><span class=\"n\">colora</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[45m&quot;</span><span class=\"n\">colorb</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\033</span><span class=\"s2\">[44m&quot;</span></pre></div><h1 id=\"org-549165ac69\">Invidious search</h1><p>The first thing that happens is this script is put in a <code>try</code> function, if a argument is given to the script e.g. <code>-i</code> it will start doing things with it. If no, it will print out the banner.</p><p>The if statement detects if by <code>sys.argv[1]</code> value if it&#39;s <code>-i</code>. The invidious_instance is set and can be changed to a invidious instance that I like.</p><p>The <code>try</code> and <code>except</code> statement checks to see if possibly the user did a command like:</p><p><code>python vids.py -i &#34;search query&#34;</code></p><p>if they didn&#39;t give that 2nd argument of the search it will just prompt them.</p><div class=\"highlight\"><pre><span></span><span class=\"k\">try</span><span class=\"p\">:</span>    <span class=\"k\">if</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-i&quot;</span><span class=\"p\">:</span>        <span class=\"n\">invidious_instance</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://invidio.xamh.de/&quot;</span>        <span class=\"k\">try</span><span class=\"p\">:</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>        <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span></pre></div><h1 id=\"org-0cd60fed9b\">Print out search results</h1><p>Using the invidious search API we fetch the search results and print them out numbered in a for loop.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">19</span><span class=\"p\">)</span><span class=\"n\">invidious_search</span> <span class=\"o\">=</span> <span class=\"n\">invidious_instance</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;api/v1/search?q=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">query</span><span class=\"n\">wol_api</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://scrap.madiator.com/api/get-lbry-video?url=&quot;</span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">invidious_search</span><span class=\"p\">)</span><span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">vid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">):</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span></pre></div><h1 id=\"org-af615ff53b\">Pick a search result</h1><p>This while loop asks the user for a video they want to play and see the comments of. Storing the number they give in a variable so that later it can be used when parsing the json for specific stuff. The reason for a while loop with the special argument is to keep prompting the user over and over to pick the result. It has to be either greater than or equal to <b>0</b> or less than or equal to <b>19</b>.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">19</span><span class=\"p\">:</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>    <span class=\"k\">try</span><span class=\"p\">:</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>    <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span></pre></div><h1 id=\"org-5810ab072d\">Comments</h1><p>Using the invidious comment api we fetch the comments of a video with the videoId, there maybe a <b>error</b> in the resulting json, most likely because there are no comments. Because of this the if statement prints <code>could not fetch comments</code>.</p><div class=\"highlight\"><pre><span></span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">invidious_instance</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/api/v1/comments/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"n\">data_comment</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"p\">)</span><span class=\"n\">json_comment</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_comment</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">if</span> <span class=\"s2\">&quot;error&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">json_comment</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;could not fetch comments&quot;</span><span class=\"p\">)</span><span class=\"k\">else</span><span class=\"p\">:</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">comment</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;comments&quot;</span><span class=\"p\">]):</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;content&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span></pre></div><h1 id=\"org-0e9c176403\">WOL-api check</h1><p>Using the WOL-API we can check if the video is available on LBRY and play with mpv from a odysee.com link over using youtube/invidious. If the lbry check gave <code>null</code> or what python calls it <code>None</code>, the link will be a youtube link, since it&#39;s what yt-dlp uses anyways. If the lbry check gave a value that&#39;s a lbry url it will play with mpv a odysee link.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># wol-api check</span><span class=\"n\">lbry_check</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">wol_api</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">])</span><span class=\"n\">lbry_check</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">lbry_check</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"c1\"># For now using odysee because yt-dlp doesn&#39;t support librarian</span><span class=\"n\">librarian_instance</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://odysee.com/&quot;</span><span class=\"k\">if</span> <span class=\"n\">lbry_check</span><span class=\"p\">[</span><span class=\"s2\">&quot;lbryurl&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>    <span class=\"c1\"># Using youtube.com since yt-dlp on any given invidious url redirects to youtube.com anyways.</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://youtube.com/watch?v=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;videoId&quot;</span><span class=\"p\">]</span><span class=\"k\">else</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Playing with LBRY!&quot;</span><span class=\"p\">)</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">librarian_instance</span> <span class=\"o\">+</span> <span class=\"n\">lbry_check</span><span class=\"p\">[</span><span class=\"s2\">&quot;lbryurl&quot;</span><span class=\"p\">]</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</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></pre></div><h1 id=\"org-a336556cc0\">Launch in MPV!</h1><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Do stuff with it.</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">)</span><span class=\"n\">quit</span><span class=\"p\">()</span></pre></div><h1 id=\"org-8461ca79d4\">Peertube</h1><p>A lot of what I discussed in the invidious part of the script applies to the PeerTube part, there are just different values and API&#39;s that are worked with.</p><div class=\"highlight\"><pre><span></span><span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-p&quot;</span><span class=\"p\">:</span>    <span class=\"k\">try</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>    <span class=\"k\">except</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>    <span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">19</span><span class=\"p\">)</span>    <span class=\"n\">search</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://sepiasearch.org/api/v1/search/videos?search=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">query</span>    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">search</span><span class=\"p\">)</span>    <span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">vid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]):</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">vid</span><span class=\"p\">[</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>    <span class=\"c1\"># Choose a result</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span>    <span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">19</span><span class=\"p\">:</span>        <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>        <span class=\"k\">try</span><span class=\"p\">:</span>                <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>        <span class=\"k\">except</span><span class=\"p\">:</span>\n      <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span>    <span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">]</span></pre></div><h1 id=\"org-1e0a5210b5\">PeerTube Comments</h1><p>This is a lot of work in progress code, it&#39;s very inefficient and only acompleshes:</p><ul><li><p>Printing out comments</p></li><li><p>Detect if a video has replies</p><ul><li><p>Tell how many replies</p></li></ul></li><li><p>Print just <b>1</b> of those replies</p></li><li><p>Detect if one of the json groups is a deleted comment and if so <code>pass</code> and don&#39;t deal with it.</p></li></ul><div class=\"highlight\"><pre><span></span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;host&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/api/v1/videos/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">][</span><span class=\"n\">c</span><span class=\"p\">][</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/comment-threads/&quot;</span><span class=\"n\">data_comment</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"p\">)</span><span class=\"n\">json_comment</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_comment</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"c1\"># PRINT COMMENTS!</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">comment</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]):</span>    <span class=\"c1\"># Sometimes peertube likes to give nonsese json</span>    <span class=\"k\">if</span> <span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>        <span class=\"k\">pass</span>    <span class=\"c1\"># This detects if a comment has replies.</span>    <span class=\"k\">elif</span> <span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;totalReplies&quot;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>        <span class=\"n\">replies</span> <span class=\"o\">=</span> <span class=\"n\">comments</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">])</span>        <span class=\"n\">data_replies</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">replies</span><span class=\"p\">)</span>        <span class=\"n\">json_replies</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data_replies</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>        <span class=\"n\">total_replies</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">json_replies</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;totalReplies&quot;</span><span class=\"p\">])</span>        <span class=\"c1\"># Print out that this comment has replies and also say how many</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"o\">+</span><span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">REPLIES: &quot;</span><span class=\"o\">+</span><span class=\"n\">total_replies</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>        <span class=\"c1\"># Here in this for loop inside of a for loop for replys</span>        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">reply</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_replies</span><span class=\"p\">[</span><span class=\"s2\">&quot;children&quot;</span><span class=\"p\">]):</span>            <span class=\"c1\"># Same thing can happen where it gives nonsense json.</span>            <span class=\"k\">if</span> <span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>                <span class=\"k\">pass</span>            <span class=\"c1\"># This prints out the first reply.</span>            <span class=\"k\">else</span><span class=\"p\">:</span>                <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">reply</span><span class=\"p\">[</span><span class=\"s2\">&quot;comment&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span>    <span class=\"c1\"># This is the final thing, the comment has no replys so it just</span>    <span class=\"c1\"># prints it as a comment.</span>    <span class=\"k\">else</span><span class=\"p\">:</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">colora</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;account&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;displayName&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">colorb</span><span class=\"o\">+</span><span class=\"n\">comment</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</span><span class=\"p\">)</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">)</span></pre></div><h1 id=\"org-ceea0ba3af\">LBRY</h1><p>This section is for LBRY, and printing out the search results of the search. </p><div class=\"highlight\"><pre><span></span><span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-l&quot;</span><span class=\"p\">:</span>    <span class=\"k\">try</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>    <span class=\"k\">except</span><span class=\"p\">:</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s2\">&quot;Searching for: &quot;</span><span class=\"p\">)</span>        <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>    <span class=\"n\">size</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span>    <span class=\"n\">search</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://lighthouse.lbry.com/search?s=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">query</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;include=channel,channel_claim_id,title&amp;size=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span>    <span class=\"n\">lbry</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://lbry.ix.tc/&quot;</span>    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">search</span><span class=\"p\">)</span>    <span class=\"n\">json_stuff</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>    <span class=\"c1\"># Results</span>    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_stuff</span><span class=\"p\">):</span>        <span class=\"n\">pre</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;lbry://&quot;</span>        <span class=\"k\">if</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]:</span>            <span class=\"n\">pre</span> <span class=\"o\">+=</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/&quot;</span>        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">pre</span> <span class=\"o\">+</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">url</span><span class=\"p\">)</span></pre></div><h1 id=\"org-8e0920166d\">LBRY comments</h1><p>Using the librarian comment api after gathering a lot of information about the publication it is possible to get the comments.</p><div class=\"highlight\"><pre><span></span><span class=\"c1\"># Choose a result</span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"k\">while</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">c</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">29</span><span class=\"p\">:</span>    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&#39;Number from 1-&#39;</span> <span class=\"o\">+</span> <span class=\"n\">size</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; of the URL you want to open: &quot;</span><span class=\"p\">)</span>    <span class=\"k\">try</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>    <span class=\"k\">except</span><span class=\"p\">:</span>            <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">100000</span><span class=\"n\">selected_url</span> <span class=\"o\">=</span> <span class=\"n\">json_stuff</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"p\">]</span><span class=\"c1\"># Do stuff with it.</span><span class=\"n\">channel_name</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span><span class=\"n\">channel_ID</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel_claim_id&quot;</span><span class=\"p\">]</span><span class=\"n\">claim_ID</span> <span class=\"o\">=</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;claimId&quot;</span><span class=\"p\">]</span><span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">lbry</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;api/comments?claim_id=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">claim_ID</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;channel_id=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">channel_ID</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;channel_name=&quot;</span> <span class=\"o\">+</span> <span class=\"n\">channel_name</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&amp;page=1&amp;page_size=15&quot;</span><span class=\"p\">)</span><span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span><span class=\"n\">json_comments</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">json_comments</span><span class=\"p\">[</span><span class=\"s2\">&quot;comments&quot;</span><span class=\"p\">]):</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">bright_cyan</span><span class=\"o\">+</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;Channel&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;Name&quot;</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"n\">norm</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\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;Comment&quot;</span><span class=\"p\">])</span><span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://odysee.com/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;channel&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">selected_url</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">system</span><span class=\"p\">(</span><span class=\"n\">command</span> <span class=\"o\">+</span> <span class=\"n\">url</span><span class=\"p\">)</span><span class=\"n\">quit</span><span class=\"p\">()</span></pre></div><h1 id=\"org-d902e2edc8\">HELP</h1><p>Using the -h argument the user can get some help aobut how to use the program.</p><div class=\"highlight\"><pre><span></span>    <span class=\"k\">elif</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;-h&quot;</span><span class=\"p\">:</span>        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"s1\">Command:</span><span class=\"s1\">python vids.py &lt;arg&gt;</span><span class=\"s1\">After doing this you will be prompted to make a search</span><span class=\"s1\">If you want you can make the search in the command by doing</span><span class=\"s1\">python vids.py &lt;arg&gt; &quot;search&quot;</span><span class=\"s1\">-l for lighthouse (LBRY network)</span><span class=\"s1\">-p for sepia (Peertube)</span><span class=\"s1\">-i for invidious) (YouTube) </span><span class=\"s1\">NOTE: All youtube links will be checked with the Watch on LBRY API. If</span><span class=\"s1\">the video is available on the lbry network, the youtube search result</span><span class=\"s1\">will be opened in a odysee.com link.</span><span class=\"s1\">&#39;&#39;&#39;</span><span class=\"p\">)</span><span class=\"k\">except</span><span class=\"p\">:</span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span></pre></div><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2022-02-11T21:39:04.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/Blog/life-3-20-2022.html",
      "url": "https://zortazert.codeberg.page/Blog/life-3-20-2022.html",
      "title": "Life 3/20/2022",
      "content_html": "<h1 id=\"org-dd8082be77\">What is this?</h1><p>Hello to whoever is reading this. I am writing this blog post for a couple of reasons:</p><ul><li><p>Haven&#39;t wrote a post in a while</p></li><li><p>Life&#39;s been a bit crazy so why not talk about that?</p></li></ul><h1 id=\"org-2b17c3ac0e\">School</h1><p>A big part of my life right now is doing school. However I don&#39;t particularly like doing school. It&#39;s just reading and answering/writing questions.</p><h2 id=\"org-3448ff5724\">Why do I need this <code>information</code>? Math/LA (Language Arts)/History/Physics.</h2><p>As far as I can tell I don&#39;t plan on being a writer, historian, mathmetician, physicist at all. It doesn&#39;t really peak my interests. At the moment I would consider someting in the realm of coding/computer science, art and maybe flipping burgers? Burgers taste good.</p><p>I see a reason to know a <b>little</b> bit of each. For math I might need to do a basic arithmetic calculation of how much a deal at a store is worth vrs the original price to help make a decision against other products. This is just a example. I think the usage of math is very little. If I needed to know a new concept that I don&#39;t already know, let&#39;s say I already know some addition, subtraction, division and multiplication I just go to wikipedia and learn it. Maybe I will go online and search up a specific calculator for the task. They exist! The internet is most everywhere if your fortunate. In terms of assignments in math, I am quick to understand them and it&#39;s not that much of a problem.</p><p>For LA (Language Arts), I view as a sort of diagnoses of writing, <b>part</b> of human communication. Well communication constantly happens. Also it is constantly evolving, new abreviations are being used to shorten a bunch of words into just some letters. LA trys to teach me some concepts to describe writing and challenge me to write similar stuff. Why do I need these concepts? Do I not get the jist of what someone saying is to me? I sort of have to understand if I want to formulate a reply. If I <b>completely don&#39;t</b> I can just ask them, it&#39;s nto that hard. Another part of LA is writing. I am not the best writer, I actually take tutoring lessons which is helping me to get better. So these assignments are <b>LONG</b> ad I need to do it still and have my parents check, and it&#39;s just tedious. I do some writing like these articles or messages in my matrix space, this writing I see value in it for myself. <b>I</b> want to do it. An LA assignment is telling me to write about something they picked out and probably wrote for themselves at one point. Writing is fun. Forced writing not really...</p><p>For history it&#39;s learning about events that happened in the past which can <i>maybe</i> help us think about the future. I don&#39;t really have that much of a problem with it except for writing.</p><p>For physics, (this is specifically talking about my physics cource not science in general) it is analyzing the movement of objects. For the most part I learn equation after equation and theory after theory about moving objects. I don&#39;t really care about the speed, velocity, trajectory of how I got my ass kicked, I just know in that moment I need to deal with the freaking pain of the ass kick and try to deflect or move away. I can deal with physics. Writing not really.</p><h1 id=\"org-cba38c4b38\">Hobbies/Matrix chat</h1><p>Another part of my life sort of the ther half, is doing hobbies: Coding/Digital Art/Photo Editing/Video editing. I like to in my free time do hobbies because for me there just fun. However I really like doing them too much. A lot of times I do them more than I do schoolwork. I need to work on control a lot more. It&#39;s also hard to estimate a boundary at school where I can <i>maybe</i> squeeze in some time to do something while wating and be fine. I always take that small oppurtunity and waste time. I also just as I described earlier about the subjects I take in school not that happy about doing them. There not <b>exciting</b>!</p><h2 id=\"org-51d2a39a7a\">What is the matrix chat?</h2><p>The matrix chat public space where internet freinds I have gathered from all accross the interwebs chat and hang out. Most all of them are like a audience of various content that I have produced. I don&#39;t know which or why because I don&#39;t have statistics, they probably just like me as a person. And I like them back! Super cool people. The <b>problem</b> is that I tend to write too much there about random personal thoughts and it&#39;s what some has described as <code>splamming</code> (madeup word of spamming). I need to stop this. A chat message string should only be about <b>MAX</b> 3 lines. Anything more is for sure meaningless and doesn&#39;t help anybody. From those 3 lines if people have something to say about them they can send a little chat string back. Maybe this will spiral into more cool stuff. Just it can&#39;t be me sending a essay length thing about setting up emacs on my laptop. Some things don&#39;t have to be talked about or could be talked about but in <b>MAX</b> 3 lines. I need to work on this. The solution I am thinking is writing more of these blog articles. Hopefuly that works out.</p><h2 id=\"org-d87379ea9e\">FOSSBOT</h2><p>I will breifly touch on this. FossBot is a matrix bot I created which can do a lot of cool stuff, like detecting some spyware websites like YT and send back a proxy a bit more private site like invidious. It can also do YT searches using the invidious api. Much much more. The problem is this is also a bit long and spammy when used too much. So I need to work on fixing that possibly. Another issue is that it doesn&#39;t work often because I host it on a account I created on <a href=\"https://denshi.org\">denshi</a>matrix servers. Denshi hosts it on some old laptop that works kinda.. sort of... So when it doesn&#39;t work I get mad and that&#39;s more chat spam. I want to stop that by switching to a different more reliable matrix server for fossbot. Maybe <code>tchncs.de</code> like how I use for my main matrix account.</p><h1 id=\"org-d0801a087d\">Wrapup</h1><p>I hope you enjoyed reading this post!</p><ul><li><p>I am writing this very late into the night</p></li><li><p>I forgot to put on spell check</p></li><li><p>A bit rushed to finish this 3/20/2022, very late though...</p></li></ul><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "summary": "<h1 id=\"org-dd8082be77\">What is this?</h1><p>Hello to whoever is reading this. I am writing this blog post for a couple of reasons:</p><ul><li><p>Haven&#39;t wrote a post in a while</p></li><li><p>Life&#39;s been a bit crazy so why not talk about that?</p></li></ul><h1 id=\"org-2b17c3ac0e\">School</h1><p>A big part of my life right now is doing school. However I don&#39;t particularly like doing school. It&#39;s just reading and answering/writing questions.</p><h2 id=\"org-3448ff5724\">Why do I need this <code>information</code>? Math/LA (Language Arts)/History/Physics.</h2><p>As far as I can tell I don&#39;t plan on being a writer, historian, mathmetician, physicist at all. It doesn&#39;t really peak my interests. At the moment I would consider someting in the realm of coding/computer science, art and maybe flipping burgers? Burgers taste good.</p><p>I see a reason to know a <b>little</b> bit of each. For math I might need to do a basic arithmetic calculation of how much a deal at a store is worth vrs the original price to help make a decision against other products. This is just a example. I think the usage of math is very little. If I needed to know a new concept that I don&#39;t already know, let&#39;s say I already know some addition, subtraction, division and multiplication I just go to wikipedia and learn it. Maybe I will go online and search up a specific calculator for the task. They exist! The internet is most everywhere if your fortunate. In terms of assignments in math, I am quick to understand them and it&#39;s not that much of a problem.</p><p>For LA (Language Arts), I view as a sort of diagnoses of writing, <b>part</b> of human communication. Well communication constantly happens. Also it is constantly evolving, new abreviations are being used to shorten a bunch of words into just some letters. LA trys to teach me some concepts to describe writing and challenge me to write similar stuff. Why do I need these concepts? Do I not get the jist of what someone saying is to me? I sort of have to understand if I want to formulate a reply. If I <b>completely don&#39;t</b> I can just ask them, it&#39;s nto that hard. Another part of LA is writing. I am not the best writer, I actually take tutoring lessons which is helping me to get better. So these assignments are <b>LONG</b> ad I need to do it still and have my parents check, and it&#39;s just tedious. I do some writing like these articles or messages in my matrix space, this writing I see value in it for myself. <b>I</b> want to do it. An LA assignment is telling me to write about something they picked out and probably wrote for themselves at one point. Writing is fun. Forced writing not really...</p><p>For history it&#39;s learning about events that happened in the past which can <i>maybe</i> help us think about the future. I don&#39;t really have that much of a problem with it except for writing.</p><p>For physics, (this is specifically talking about my physics cource not science in general) it is analyzing the movement of objects. For the most part I learn equation after equation and theory after theory about moving objects. I don&#39;t really care about the speed, velocity, trajectory of how I got my ass kicked, I just know in that moment I need to deal with the freaking pain of the ass kick and try to deflect or move away. I can deal with physics. Writing not really.</p><h1 id=\"org-cba38c4b38\">Hobbies/Matrix chat</h1><p>Another part of my life sort of the ther half, is doing hobbies: Coding/Digital Art/Photo Editing/Video editing. I like to in my free time do hobbies because for me there just fun. However I really like doing them too much. A lot of times I do them more than I do schoolwork. I need to work on control a lot more. It&#39;s also hard to estimate a boundary at school where I can <i>maybe</i> squeeze in some time to do something while wating and be fine. I always take that small oppurtunity and waste time. I also just as I described earlier about the subjects I take in school not that happy about doing them. There not <b>exciting</b>!</p><h2 id=\"org-51d2a39a7a\">What is the matrix chat?</h2><p>The matrix chat public space where internet freinds I have gathered from all accross the interwebs chat and hang out. Most all of them are like a audience of various content that I have produced. I don&#39;t know which or why because I don&#39;t have statistics, they probably just like me as a person. And I like them back! Super cool people. The <b>problem</b> is that I tend to write too much there about random personal thoughts and it&#39;s what some has described as <code>splamming</code> (madeup word of spamming). I need to stop this. A chat message string should only be about <b>MAX</b> 3 lines. Anything more is for sure meaningless and doesn&#39;t help anybody. From those 3 lines if people have something to say about them they can send a little chat string back. Maybe this will spiral into more cool stuff. Just it can&#39;t be me sending a essay length thing about setting up emacs on my laptop. Some things don&#39;t have to be talked about or could be talked about but in <b>MAX</b> 3 lines. I need to work on this. The solution I am thinking is writing more of these blog articles. Hopefuly that works out.</p><h2 id=\"org-d87379ea9e\">FOSSBOT</h2><p>I will breifly touch on this. FossBot is a matrix bot I created which can do a lot of cool stuff, like detecting some spyware websites like YT and send back a proxy a bit more private site like invidious. It can also do YT searches using the invidious api. Much much more. The problem is this is also a bit long and spammy when used too much. So I need to work on fixing that possibly. Another issue is that it doesn&#39;t work often because I host it on a account I created on <a href=\"https://denshi.org\">denshi</a>matrix servers. Denshi hosts it on some old laptop that works kinda.. sort of... So when it doesn&#39;t work I get mad and that&#39;s more chat spam. I want to stop that by switching to a different more reliable matrix server for fossbot. Maybe <code>tchncs.de</code> like how I use for my main matrix account.</p><h1 id=\"org-d0801a087d\">Wrapup</h1><p>I hope you enjoyed reading this post!</p><ul><li><p>I am writing this very late into the night</p></li><li><p>I forgot to put on spell check</p></li><li><p>A bit rushed to finish this 3/20/2022, very late though...</p></li></ul><h1 id=\"org-a09e368349\">Licence</h1><p><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer> </p>",
      "date_published": "2022-03-20T01:22:48.000Z"
    },
    {
      "guid": "https://zortazert.codeberg.page/blog/why-I-can-not-use-linux.html",
      "url": "https://zortazert.codeberg.page/blog/why-I-can-not-use-linux.html",
      "title": "Why I can't use Linux",
      "content_html": "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"\" xml:lang=\"\"><header id=\"title-block-header\"><h1 class=\"title\">Why I can't use Linux</h1></header><p>This is an article explaining why I can't use a magical, wonderfule and awesome opperating system Linux. I say Linux as a broad term, there are multiple possible versions of Linux and is advertised a lot in the Linux community as an easy switch. Anyone can do it! Well I can't and I have to explain it over and over to people or even some people that just want to make me upset explaining them \"Why I can't use Linux\" as the title suggests.</p><p>Here are a bunch of questions that usually pop up:</p><ul><li>Why?</li><li>Do you not have a usb stick?</li><li>Is it you or your dad that owns your computer?</li><li>VM's?</li><li>Spare computer or something</li></ul><h1 id=\"why\">Why?</h1><p>The main underlying factor that stops me from installing Linux is my dad. If I want to do most anything on my computer I must first have permission from my dad. I seem to do a lot of things my dad wouldn't like or approve of already like talking to a strangers onthe internet is a big one. I can manage this stuff secretely and he could find out but unlikely. However Linux is a different story. He has in the past after me asking him repeatedly given an old work laptop of his which I managed to install linux on and had many many good times. The issue was I spent a lot of time on it I went to 5 AM staring at the thing playing with it mostly installing software. It was really fun but I spent just way too much time on it. So after many times catching me and giving me a chance please after your done with school you can use Linux. He just took it away. I have many times with him where there is a fuse sort of where he is screaming me beating me for some stupid thing I did. It's only natural that this weird Linux laptop and I am spending time on he can take away to teach me lesson and work. So it's been rouphly 6 months since he took it away for good and haven't touched linux. I asked him for my birthday that I wanted Linux as the only present <strong>JUST LINUX</strong> and well I had a bunch of schoolwork I needed to get done and he was super upset that day so for my 14th birthday (I turned 14 in april this year at the time of writing this article) I just had no presents like Linux which I wanted. Later he did get me a burger by later I mean about a month… So in his eyes Linux is more a distractive toy I will spend time on instead of doing things he wants me to do.</p><h1 id=\"do-you-not-have-a-usb-stick-secretely-use-linux\">Do you not have a usb stick? (Secretely use linux)</h1><p>No, I do not have really any usb sticks since my dad took them away as more punishments. I got my dad to buy USB sticks for linux and he decided to buy super expensive two <strong>64G</strong> USB sticks and a USB C <strong>128G</strong> USB stick. one of <strong>64G</strong> USB sticks I used to install linux on that laptop which required him to put a linux iso on because windows needs admin to do any of that stuff. He took all of those usb sticks as more punishments for various things I did. So I found a very very old 20 mb USB stick in my dad's pen jar. You might be thinking oh of cource you can install like &lt;insert super minimal distro&gt; on it. Well I have installed arch with the arch wiki guide before and that took a very very long time. I just don't have that time at all I always need to do school work. If I was better at reading and following directions I could do that. But still I would need to somehow do that in a very very short time as well as boot back into windows. Speaking of windows lets say I managed to get &lt;insert super minimal distro&gt; on my computer people suggest just rice it to look like windows. My dad isn't extremely stupid and has used windows a lot in his life he can tell when something looks off. Also it would be a ton of work to fake and put all my files and everything to replicate windows. Time I simply don't have because of school. I could try something like this in the summer which is comming soon but it's very very risky. To my dad on this computer it's very epensive he doesn't want me to ruine it and get warrenty off. I have no clue why he cares about warrenty so much. So the computer is expensive if he sees linux on it he could deffinitely freak. People have suggested me to tell him \"Cope and seeth\". Yeah I could <em>try</em> to say that but kind of difficult while someone is beating you.</p><h1 id=\"is-it-you-or-your-dad-that-owns-your-computer\">Is it you or your dad that owns your computer?</h1><p>My dad baught my computer and can and will do whatever he wants with it. However I am the primary user of it. I spend practicly every day of my life here on my computer. My dad mainly uses my computer to check my homework.</p><h1 id=\"vms\">VM's?</h1><p>Most VM's require an admin password to do anything. I tried QEMU but it was very difficult to use for me. I do not have the admin password to my computer because my dad thinks it's best if only he has it.</p><h1 id=\"license\">License</h1><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer>",
      "summary": "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"\" xml:lang=\"\"><header id=\"title-block-header\"><h1 class=\"title\">Why I can't use Linux</h1></header><p>This is an article explaining why I can't use a magical, wonderfule and awesome opperating system Linux. I say Linux as a broad term, there are multiple possible versions of Linux and is advertised a lot in the Linux community as an easy switch. Anyone can do it! Well I can't and I have to explain it over and over to people or even some people that just want to make me upset explaining them \"Why I can't use Linux\" as the title suggests.</p><p>Here are a bunch of questions that usually pop up:</p><ul><li>Why?</li><li>Do you not have a usb stick?</li><li>Is it you or your dad that owns your computer?</li><li>VM's?</li><li>Spare computer or something</li></ul><h1 id=\"why\">Why?</h1><p>The main underlying factor that stops me from installing Linux is my dad. If I want to do most anything on my computer I must first have permission from my dad. I seem to do a lot of things my dad wouldn't like or approve of already like talking to a strangers onthe internet is a big one. I can manage this stuff secretely and he could find out but unlikely. However Linux is a different story. He has in the past after me asking him repeatedly given an old work laptop of his which I managed to install linux on and had many many good times. The issue was I spent a lot of time on it I went to 5 AM staring at the thing playing with it mostly installing software. It was really fun but I spent just way too much time on it. So after many times catching me and giving me a chance please after your done with school you can use Linux. He just took it away. I have many times with him where there is a fuse sort of where he is screaming me beating me for some stupid thing I did. It's only natural that this weird Linux laptop and I am spending time on he can take away to teach me lesson and work. So it's been rouphly 6 months since he took it away for good and haven't touched linux. I asked him for my birthday that I wanted Linux as the only present <strong>JUST LINUX</strong> and well I had a bunch of schoolwork I needed to get done and he was super upset that day so for my 14th birthday (I turned 14 in april this year at the time of writing this article) I just had no presents like Linux which I wanted. Later he did get me a burger by later I mean about a month… So in his eyes Linux is more a distractive toy I will spend time on instead of doing things he wants me to do.</p><h1 id=\"do-you-not-have-a-usb-stick-secretely-use-linux\">Do you not have a usb stick? (Secretely use linux)</h1><p>No, I do not have really any usb sticks since my dad took them away as more punishments. I got my dad to buy USB sticks for linux and he decided to buy super expensive two <strong>64G</strong> USB sticks and a USB C <strong>128G</strong> USB stick. one of <strong>64G</strong> USB sticks I used to install linux on that laptop which required him to put a linux iso on because windows needs admin to do any of that stuff. He took all of those usb sticks as more punishments for various things I did. So I found a very very old 20 mb USB stick in my dad's pen jar. You might be thinking oh of cource you can install like &lt;insert super minimal distro&gt; on it. Well I have installed arch with the arch wiki guide before and that took a very very long time. I just don't have that time at all I always need to do school work. If I was better at reading and following directions I could do that. But still I would need to somehow do that in a very very short time as well as boot back into windows. Speaking of windows lets say I managed to get &lt;insert super minimal distro&gt; on my computer people suggest just rice it to look like windows. My dad isn't extremely stupid and has used windows a lot in his life he can tell when something looks off. Also it would be a ton of work to fake and put all my files and everything to replicate windows. Time I simply don't have because of school. I could try something like this in the summer which is comming soon but it's very very risky. To my dad on this computer it's very epensive he doesn't want me to ruine it and get warrenty off. I have no clue why he cares about warrenty so much. So the computer is expensive if he sees linux on it he could deffinitely freak. People have suggested me to tell him \"Cope and seeth\". Yeah I could <em>try</em> to say that but kind of difficult while someone is beating you.</p><h1 id=\"is-it-you-or-your-dad-that-owns-your-computer\">Is it you or your dad that owns your computer?</h1><p>My dad baught my computer and can and will do whatever he wants with it. However I am the primary user of it. I spend practicly every day of my life here on my computer. My dad mainly uses my computer to check my homework.</p><h1 id=\"vms\">VM's?</h1><p>Most VM's require an admin password to do anything. I tried QEMU but it was very difficult to use for me. I do not have the admin password to my computer because my dad thinks it's best if only he has it.</p><h1 id=\"license\">License</h1><hr> <footer> <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'><img alt='Creative Commons License' style='border-width:0' width='88' height='31' src='../images/cc-by-sa.png' /></a><br> Unless otherwise noted, all content on this website is Copyright Zortazert 2021-2022 and is licensed under <a rel='license' href='http://creativecommons.org/licenses/by-sa/4.0/'>CC BY-SA 4.0</a>. </footer>",
      "date_published": "2022-06-16T17:06:47.000Z"
    }
  ]
}
