<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: amekusa03</title>
    <description>The latest articles on DEV Community by amekusa03 (@amekusa03).</description>
    <link>https://dev.to/amekusa03</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3852389%2Fa05dbd16-8fce-4eea-b183-b1a8ec463cab.jpeg</url>
      <title>DEV Community: amekusa03</title>
      <link>https://dev.to/amekusa03</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amekusa03"/>
    <language>en</language>
    <item>
      <title>Rescuing 216 Pages from the GeoCities Era: How I Built an HTML-to-Blogger Tool</title>
      <dc:creator>amekusa03</dc:creator>
      <pubDate>Fri, 03 Apr 2026 15:23:57 +0000</pubDate>
      <link>https://dev.to/amekusa03/rescuing-216-pages-from-the-geocities-era-how-i-built-an-html-to-blogger-tool-2ajk</link>
      <guid>https://dev.to/amekusa03/rescuing-216-pages-from-the-geocities-era-how-i-built-an-html-to-blogger-tool-2ajk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I want to transfer the HTML format to Google Blogger.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The outdoor club's website (which was called a homepage back then) was archived when GeoCities shut down. The last update was in April 2014.&lt;br&gt;
If it had become completely inaccessible, I could have accepted it, but it's just too sad that it's become an archive.&lt;/p&gt;

&lt;p&gt;Okay, I'll do this!&lt;br&gt;
I declared to the old site administrator (a friend) "It's okay, let me do it."&lt;br&gt;
For now, I'll just go with Vercel's Hobby for the new site.&lt;br&gt;
Then I checked &lt;strong&gt;the old site's HTML&lt;/strong&gt;&lt;br&gt;
. What? &lt;strong&gt;216 pages.&lt;/strong&gt;&lt;br&gt;
Doing this by hand is impossible!&lt;br&gt;
The old site was beautifully made by my friend while he was learning HTML.&lt;br&gt;
I tried cleaning it with AI, but my instructions were bad and it just didn't work.&lt;br&gt;
With the help of another friend, I aimed to create a stylish new site using React and other things in VS Code.&lt;br&gt;
While doing all that, Windows started to become unstable and eventually crashed.&lt;br&gt;
The data was still there, so I reinstalled Windows and DevStudio. I lost the product ID. It 's completely over .&lt;br&gt;
So I installed Ubuntu, installed VS Code, and decided to develop with Python. (I've never used it before)&lt;br&gt;
While the installation was in progress, I also changed the new site's operational policy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Members can post&lt;/li&gt;
&lt;li&gt;You can also upload videos.
With two additional requirements, the site has also been changed to Google Blogger ♫&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Getting Started with Python
&lt;/h2&gt;

&lt;p&gt;I started with 'Hello python' and created a CLI for tag cleaning of HTML files.&lt;br&gt;
Next, I tried posting to Blogger using the API, and I'm starting to get the hang of it.&lt;/p&gt;
&lt;h1&gt;
  
  
  Software Requirements Definition
&lt;/h1&gt;

&lt;p&gt;Ruthless decision&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML history management&lt;/li&gt;
&lt;li&gt;Cleaning HTML

&lt;ul&gt;
&lt;li&gt;I want to manage the design entirely in Blogger, so I'm removing font and color settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Keyword extraction and registration

&lt;ul&gt;
&lt;li&gt;Blogger allows you to set keywords for each post, so I want to use words that match the text in the HTML as keywords
(e.g., kayaking, Bouldering).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Location extraction and registration

&lt;ul&gt;
&lt;li&gt;This is also a feature that can be added to each Blogger post
(Akihabara, Mt. Fuji, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Remove Exif data from images and add watermarks.&lt;/li&gt;
&lt;li&gt;Upload articles and images&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GUI&lt;/p&gt;
&lt;h1&gt;
  
  
  implementation
&lt;/h1&gt;

&lt;p&gt;Just as you all expected, I'm totally hooked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was struggling to get used to Ubuntu's IME, so I installed Fcitx5 and managed to work around the problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I discovered that the Blogger API doesn't have image-related features → I established and standardized a somewhat easier manual + automatic linking procedure for images.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I couldn't get used to Python nesting → I ended up checking the nesting with my finger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Library version issue occurred → Misunderstood Python virtual environment (venv) → Fumbled around trying to create an environment with virtualBox → Realized it was in the terminal and almost went blank.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I accidentally sent about 200 Blogger API requests without using a timer → I received an account lock warning email → I sent an apology email to Google and my account was restored the next day.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I installed Wine and Excel (MS-Office) to aggregate regional data → got stuck in cell input mode and switched to LibreOffice → discovered nominatim geocoding and solved the problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trying to run a virtual Windows using insurance → Too slow. Insufficient HDD space. Ultimately, the license is too expensive, so I gave up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I asked the AI ​​to do various things, but it didn't understand the language specifications and approved them haphazardly → I ended up having to rewrite almost everything.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To create a GUI with Tkinter, you write the code → The base is written by AI, and then you just stare at the source code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tracing Python arguments → Why isn't &lt;code&gt;copy&lt;/code&gt; running? → Wait, even &lt;code&gt;queue&lt;/code&gt; instances are referenced when you put them?! And so on, intense debugging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I can't do it well, so I end up pressing the keys too hard → My family tells me it's too loud, and I almost cry.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Reaffirming established theories
&lt;/h1&gt;

&lt;p&gt;When it comes to technology, you either invest time, money, or wisdom.&lt;br&gt;
For me, someone who lacks wisdom, it seems it was time.&lt;br&gt;
However, I think I gained a lot.&lt;br&gt;
You can't know the taste of pudding until you try it.&lt;br&gt;
Ubuntu is wonderful. I dabbled in it a little for work, but I didn't know about the community at that time. Ultimately, what's important is human connection.&lt;/p&gt;
&lt;h1&gt;
  
  
  I would appreciate your help with debugging.
&lt;/h1&gt;

&lt;p&gt;I've tried to code it so that it should work on Windows and Mac as long as you're using a Python environment.&lt;br&gt;
It requires Google API authentication credentials, which is a bit of a hassle, but I'd appreciate it if you could debug it.&lt;br&gt;
Even just a review would be encouraging.&lt;br&gt;
Please feel free to point out any issues with the Python coding!&lt;/p&gt;

&lt;p&gt;Introduction:&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://html-sigma-amber.vercel.app/app/dev3_en.html" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;html-sigma-amber.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Video:   &lt;iframe src="https://www.youtube.com/embed/gFgYCVHIfW0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;code:&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/amekusa03" rel="noopener noreferrer"&gt;
        amekusa03
      &lt;/a&gt; / &lt;a href="https://github.com/amekusa03/html-blogger" rel="noopener noreferrer"&gt;
        html-blogger
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      htmlからGoogle Bloggerへ変換とアップロードをサポートします
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;HTML to Blogger Ver0.98&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A desktop application that automatically processes local HTML files and images and posts them to Blogger.&lt;br&gt;
It performs HTML cleaning, adds watermarks to images, assigns keywords and location information, and uploads to Blogger.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Qiita Article&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://qiita.com/amekusa03/items/b8ac77cd3dd6e6cc65aa" rel="nofollow noopener noreferrer"&gt;Explanation article for this tool (Qiita)&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction Video&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://youtu.be/gFgYCVHIfW0?si=fby7oARRbfOy2K4K" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e8e366f73ef5f9fd89c8979d944157babf0421cafa86c1678d4749f85080b1c3/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f67466759435648496657302f6d617872657364656661756c742e6a7067" alt="Introduction Video"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Main Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML Cleaning&lt;/strong&gt;: Removes unnecessary tags and normalizes formatting for posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Processing&lt;/strong&gt;: Removes EXIF data and adds watermarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata Assignment&lt;/strong&gt;: Automatically adds keywords (&lt;code&gt;search&lt;/code&gt; tags) and location information (&lt;code&gt;georss&lt;/code&gt; tags) by analyzing the article content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blogger Upload&lt;/strong&gt;: Uploads image links and articles as drafts using the Blogger API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GUI Operation&lt;/strong&gt;: User-friendly GUI with progress visualization and error recovery features.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Processing Flow&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Processing is executed in the following order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;import_file.py&lt;/code&gt;&lt;/strong&gt;: Imports files from the source folder to the working folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;serial_file.py&lt;/code&gt;&lt;/strong&gt;: Converts file names into sequential numbering format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;clean_html.py&lt;/code&gt;&lt;/strong&gt;: Cleans up HTML…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/amekusa03/html-blogger" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>productivity</category>
      <category>blogger</category>
    </item>
  </channel>
</rss>
