WordPress EnlighterJS Code Extractor

WordPress EnlighterJS Code Extractor je Python program koji omogućava automatsko izdvajanje svih blokova programskog koda sa WordPress stranica koje koriste EnlighterJS Syntax Highlighter. Program preuzima HTML sa stranice, prepoznaje EnlighterJS blokove i snima ih u lokalni folder kao zasebne fajlove, sa odgovarajućim nazivima i ekstenzijama.

Ovo je idealno rešenje za programere, nastavnike ili blogere koji žele da brzo preuzmu kod sa tutorijala, članaka ili dokumentacije, bez ručnog kopiranja.


Mogućnosti

  1. Automatsko preuzimanje HTML-a sa URL-a
    Program koristi Python requests za preuzimanje stranice i čuvanje lokalno kao privremeni HTML fajl.
  2. Prepoznavanje EnlighterJS kod blokova
    Podržava različite varijante EnlighterJS sintakse (pre.EnlighterJS, pre.EnlighterJSRAW, code.EnlighterJS).
  3. Automatsko imenovanje fajlova
    • Ako prva linija blok koda sadrži komentar tipa #ime_fajla.ext, koristi upravo taj naziv i ekstenziju.
    • Ako prva linija ne postoji, koristi ekstenziju iz atributa data-enlighter-language (python → .py, html → .html, javascript → .js, itd.).
    • Ako ni to ne postoji, koristi generičke nazive program01.py, program02.py itd.
  4. Folder po imenu članka
    Svi izdvojeni fajlovi se smeštaju u folder nazvan po URL-u članka, npr. moj-clanak/.
  5. Čišćenje privremenih fajlova
    HTML fajl koji se preuzima privremeno se automatski briše nakon što se kod blokovi izdvoje.
  6. Podrška za različite programske jezike
    Python, HTML, CSS, JavaScript, Bash, C/C++, PHP, JSON, XML, SQL i drugi.

Kako koristiti program

  1. Instaliraj Python 3
    Program zahteva Python 3.6 ili noviji.
  2. Preuzmi program
    Snimi fajl wordpress2code.py na svoj računar.
  3. Pokreni iz terminala python3 wordpress2code.py <URL> gde je <URL> adresa WordPress stranice koju želiš da preuzmeš.
  4. Rezultat
    • Folder sa imenom članka se kreira u trenutnom direktorijumu.
    • Svi EnlighterJS kod blokovi se snimaju kao zasebni fajlovi u tom folderu.
    • Privremeni HTML fajl se automatski briše.
  5. Primer upotrebe
#Primer upotrebe.txt 

python3 wordpress2code.py https://example.com/tutoral-o-pythonu 

Rezultat: moj-tutorial/ 
                      ├── htmleditor.py 
                      ├── program02.js 
                      └── style.css

Instalacija zavisnosti

Program koristi sledeće Python biblioteke:

  • requests — za HTTP preuzimanje stranica
  • beautifulsoup4 — za parsiranje HTML-a

Možeš ih instalirati pomoću sledeće skripte:


Skripta: install.sh

#install.sh
#!/bin/bash

echo "🔧 Instalacija zavisnosti za WordPress EnlighterJS Code Extractor"

# Proveri da li je pip instaliran
if ! command -v pip3 &> /dev/null
then
    echo "❌ pip3 nije pronađen. Instaliraj pip3 prvo."
    exit
fi

# Instalacija zavisnosti
pip3 install --user requests beautifulsoup4

echo "✅ Zavisnosti su instalirane."
echo "Sada možete pokrenuti: python3 wordpress2code.py <URL>"

Programski kod za wordpress2code.py

#wordpress2code.py
#!/usr/bin/env python3
import sys
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse

# ---------------------- Funkcije ----------------------

def download_html(url, output_file):
    """Preuzmi HTML sa URL-a i sačuvaj lokalno"""
    try:
        print(f"📥 Preuzimam: {url}")
        response = requests.get(url)
        response.raise_for_status()
        with open(output_file, "w", encoding="utf-8") as f:
            f.write(response.text)
        print(f"✅ Stranica sačuvana kao {output_file}")
    except requests.exceptions.RequestException as e:
        print(f"❌ Greška pri preuzimanju: {e}")
        sys.exit(1)


def get_language(block):
    """Vrati ekstenziju na osnovu jezika u EnlighterJS atributima"""
    lang = block.get("data-enlighter-language", "").strip().lower()

    if not lang:
        # ako nema data-enlighter-language, pokušaj iz class atributa
        classes = block.get("class", [])
        for c in classes:
            c = c.lower()
            if c in ["python", "html", "css", "javascript", "bash", "cpp"]:
                lang = c
                break

    # mapiranje jezika → ekstenzije
    ext_map = {
        "python": "py",
        "html": "html",
        "css": "css",
        "javascript": "js",
        "bash": "sh",
        "cpp": "cpp",
        "c++": "cpp",
        "json": "json",
        "xml": "xml",
        "php": "php",
    }

    return ext_map.get(lang, "txt")


def extract_enlighter_code(html_file, base_name):
    """Izdvoji sve EnlighterJS blokove i sačuvaj ih"""
    with open(html_file, "r", encoding="utf-8") as f:
        soup = BeautifulSoup(f, "html.parser")

    # Pronađi sve varijante EnlighterJS blokova
    code_blocks = soup.find_all("pre", class_=["EnlighterJS", "enlighterjs", "EnlighterJSRAW"])
    if not code_blocks:
        print("⚠️ Nema pronađenih EnlighterJS kod blokova.")
        return

    # Folder za kodove
    code_folder = os.path.splitext(base_name)[0]
    os.makedirs(code_folder, exist_ok=True)

    count = 0
    for i, block in enumerate(code_blocks, start=1):
        code_text = block.get_text().strip()
        if not code_text:
            continue

        # Proveri prvu liniju — ako počinje sa # i ima tačku (ime fajla)
        first_line = code_text.splitlines()[0].strip()
        if first_line.startswith("#") and "." in first_line:
            file_name = first_line.lstrip("#").strip()
        else:
            # Ako nema, koristi ekstenziju iz EnlighterJS jezika
            ext = get_language(block)
            file_name = f"program{str(i).zfill(2)}.{ext}"

        file_path = os.path.join(code_folder, file_name)

        # Zapiši kod
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(code_text)

        count += 1
        print(f"💾 Snimljen kod: {file_path}")

    print(f"✅ Ukupno izdvojeno {count} EnlighterJS blokova u folder: {code_folder}")


# ---------------------- Glavni program ----------------------

def main():
    if len(sys.argv) < 2:
        print("Upotreba: python3 wordpress2code.py <URL>")
        sys.exit(1)

    url = sys.argv[1]
    parsed = urlparse(url)
    base_name = parsed.path.strip("/").split("/")[-1] or "wordpress_stranica"
    html_file = f"{base_name}.html"

    # 1️⃣ Preuzmi HTML
    download_html(url, html_file)

    # 2️⃣ Izdvoji EnlighterJS kodove
    extract_enlighter_code(html_file, base_name)

    # 3️⃣ Obriši privremeni HTML fajl
    try:
        os.remove(html_file)
        print(f"🧹 Obrisan privremeni fajl: {html_file}")
    except OSError:
        pass


if __name__ == "__main__":
    main()

By Abel

Leave a Reply

Your email address will not be published. Required fields are marked *