Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano (edytowane)

📝 Instrukcja wykonywania kopii zapasowej tematów z Forum PCLab.pl 📝

(do przeglądania w trybie offline)

 

 

Witam serdecznie Drodzy Forumowicze,

być może nie mam wystarczająco wysokiego ilorazu inteligencji, dlatego długo zastanawiałem się, jak w prosty sposób przedstawić cały proces wykonywania kopii zapasowej offline tematów z Forum PCLab.pl dla wszystkich użytkowników.

 

Nie obyło się jednak bez wykorzystywania sztucznej inteligencji (da się przygotować wszystko bez niej, ale wtedy musimy więcej pomyśleć, a chciałem, żeby każdy mógł w miarę łatwo wykonać sobie kopię zapasową dowolnego tematu).

 

Moja instrukcja wykonywania kopii zapasowej tematów zakłada zapisywanie zrzutów poszczególnych stron tematów z forum do jednego pliku w formacie HTML, który można odczytać bez dostępu do Internetu (z wyjątkiem osadzonych multimediów, jak np. filmy YouTube - niestety, te wczytują się dopiero po uzyskaniu połączenia z Internetem).

 

Starałem się jak najbardziej uprościć cały proces, aczkolwiek instrukcja nadal zakłada wykorzystanie sztucznej inteligencji do wygenerowania listy komend, które wklejamy potem do pliku wykonywalnego, uruchamiającego aplikację Monolith CLI. Monolith CLI pozwoli nam na wykonanie zrzutów wszystkich stron tematu (jeśli takowe zawiera).

 

Cały proces przedstawiam poniżej, w kilku prostych krokach.

 

1. Pobieramy załączone do tego postu archiwum w formacie .ZIP, które zawiera aplikację Monolith CLI oraz plik wykonywalny .BAT o nazwie dump.bat, z przykładową komendą do wykonania jednego zrzutu jednej strony.

2. Otwieramy za pomocą dowolnego notatnika plik wykonywalny.

3. Jeśli chcemy zapisać wyłącznie jedną stronę tematu, modyfikujemy odpowiednio poniższą komendę. UWAGA: jeśli chcemy zapisać więcej stron tematu, przejdźmy od razu do kroku 6.

 

"monolith URL -o filename.html"

 

Podmieniamy cząstkę "URL" na nasz odnośnik do strony, której kopię chcemy wykonać. Cząstkę "filename" zmieniamy na wymyśloną przez nas nazwę pliku wyjściowego.

4. Nadpisujemy edytowany w notatniku plik .BAT, po czym uruchamiamy go.

5. Czekamy aż Monolith zakończy pobieranie strony internetowej. Po skończonej operacji, możemy uruchomić plik wyjściowy z rozszerzeniem .HTML o wybranej przez nas nazwie w dowolnej przeglądarce internetowej i przeglądać nawet bez dostępu do Internetu.

6. W celu zapisania wszystkich stron danego tematu, musimy przygotować polecenie dla Monolith w odpowiedni sposób. W tym celu posłużymy się sztuczną inteligencją (np. ChatGPT 4o). Do wykonania kopii zapasowej wszystkich stron wybranego tematu, będziemy potrzebowali tyle komend ile stron ma temat. Przygotujmy zatem całościową kopię zapasową tematu "Sylwester z Labem 2022".

7. Otwieramy czat ze sztuczną inteligencją i wprowadzamy do niego odpowiednio zmodyfikowane, poniższe polecenie, w którym cząstkę "URL" zmieniamy na podstawowy adres wybranego tematu. Pliki zostaną nazwane automatycznie, zgodnie z ciągiem znaków występującym po części "/topic/" w każdym adresie jaki wkleimy.

 

Based on the command: monolith URL -o filename.html, prepare me a list of X commands. In every command change the part "filename" to the string occurring in the URL after the part "/topic/", but remember to add (excluding the first command) the part "/page/2" (remember to increment the number in that part for each new command created) and then remove the symbol "/" from the filename. Please do not enumerate each command.

 

8. Temat pt. "Sylwester z Labem 2022" ma 4 strony. Wygenerować musimy zatem tyle komend, ile jest stron. Jego adres to:  https://forum.pclab.pl/topic/1360733-sylwester-z-labem-2022.

9. Modyfikujemy zatem polecenie w poniższy sposób i wprowadzamy je do czatu ze sztuczną inteligencją.

 

Based on the command: monolith https://forum.pclab.pl/topic/1360733-sylwester-z-labem-2022 -o filename.html, prepare me a list of 4 commands. In every command change the part "filename" to the string occurring in the URL after the part "/topic/", but remember to add (excluding the first command) the part "/page/2" (remember to increment the number in that part for each new command created) and then remove the symbol "/" from the filename. Please do not enumerate each command.

 

Cząstkę “URL” zmieniliśmy na adres pierwszej strony tematu, a część ”X” zastąpiliśmy dowolną ilością stron tego tematu (nie musimy kopiować wszystkich). Wklejmy teraz przygotowane polecenie do czatu i wyślijmy je do sztucznej inteligencji.

 

obraz.png.2445ff06b332ac85e79801b76dbea701.png

 

W rezultacie otrzymaliśmy komendy gotowe do wklejenia w naszym pliku wykonywalnym.

 

10. Edytujemy plik dump.bat w notatniku, wklejamy do niego otrzymane od ChatGPT komendy, po czym nadpisujemy go.

11. Uruchamiamy nadpisany plik i czekamy na zakończenie procesu wykonywania kopii zapasowej przez Monolith CLI.

12. Po zamknięciu okna, w rezultacie widzimy w folderze głównym pliki .HTML każdej ze stron tematu. Możemy teraz stworzyć nowy folder o nazwie "Sylwester z Labem 2022" i przenieść do niego te pliki.

13. Tak przygotowana kopia zapasowa jest gotowa do odczytu bez dostępu do Internetu, a po udostępnieniu na serwerze, można przeglądać je jak każdą stronę w Internecie.

14. Serdecznie zachęcam Was do przysyłania wykonanych kopii w tym temacie. Stwórzmy razem swoje wspólne archiwum! Chciałbym jednak byśmy usystematyzowali je nieco. W tym celu wykorzystamy Web Archive, ale to już wkrótce. Na razie pobierajcie wszystko co się da, bo zaraz znika.

 

Pozdrawiam serdecznie! :)

Edytowane przez Filip454
  • Like 2
  • Upvote 1
  • Filip454 zmienił(a) tytuł na 📝 Instrukcja wykonywania kopii zapasowej tematów z Forum PCLab.pl
  • tomcug przypiął/eła ten temat
Opublikowano (edytowane)

Nawet nie trzeba do tego EjAja, wystarczy zwykły skrypt batchowy, żeby wygenerować listę poleceń, np. taki:

 

@echo off

set url=https://forum.pclab.pl/topic/1173064-red-dead-redemption-2
set turl=%url:~-1%

if "%turl%"=="/" set url=%url:~0,-1%

set pages=521

set command=monolith %url% -o

for /f "tokens=4 delims=/" %%a in ("%command%") do set topic=%%a
set topic=%topic:~0,-3%

for /L %%n in (1,1,%pages%) do (
	if "%%n"=="1" (
		echo %command% %topic%.html > monolith_%topic%.bat
	) else (
		echo %command:~0,-3%/page/%%n -o %topic%-page-%%n.html >> monolith_%topic%.bat
	)
)

 

Wystarczy to zapisać jako plik .bat, edytować, żeby ustawić URL tematu i liczbę stron, zapisać i uruchomić. W katalogu ze skryptem zostanie wygenerowany .bat plik z nazwą tematu zawierający listę poleceń dla monolith.

W załączniku wrzucam ten sam .bat, którego kod jest tutaj.

 

monolith.bat

Edytowane przez Dermi
  • Thanks 1
Opublikowano (edytowane)

A tutaj skrypt dla Linuxa, wystarczy w pliku links.txt wkleić linki do tematów których chcemy wygenerować. Tylko trzeba wkleić link do ostatniej strony tematu np:

 

 

https://forum.pclab.pl/topic/774052-off-polityczny/page/6620/
https://forum.pclab.pl/topic/1340132-transformacja-energetyczna-oze-paliwa-kopalne-co2-ceny-energii-elektromobilność/page/310/
https://forum.pclab.pl/topic/1368500-wojny-i-konflikty-zbrojne-na-świecie/page/35/

 

 


 

#!/bin/bash

# Plik wejściowy z linkami
input_file="links.txt"
# Plik wyjściowy z komendami
output_file="monolith_commands.sh"

# Usuń istniejący plik wyjściowy, jeśli istnieje
rm -f "$output_file"

# Przetwarzanie linków
while IFS= read -r line; do
    # Ekstrakcja numeru strony z URL
    page_number=$(echo "$line" | grep -o 'page/[0-9]*' | cut -d'/' -f2)

    # Jeśli numer strony nie istnieje, ustaw 1
    if [ -z "$page_number" ]; then
        page_number=1
    fi

    # Ekstrakcja tematu z URL (numer i tytuł)
    topic=$(echo "$line" | sed -E 's|https://forum.pclab.pl/topic/([0-9]+-[^/]+)/.*|\1|')

    # Generowanie komendy dla strony 1 (bez /page/1, jeśli jest tylko jedna strona)
    if [ "$page_number" -eq 1 ]; then
        echo "monolith https://forum.pclab.pl/topic/$topic -o ${topic}.html" >> "$output_file"
    else
        echo "monolith https://forum.pclab.pl/topic/$topic -o ${topic}.html" >> "$output_file"

        # Generowanie komend dla stron od 2 do ostatniej
        for i in $(seq 2 "$page_number"); do
            echo "monolith https://forum.pclab.pl/topic/$topic/page/$i -o ${topic}-page-$i.html" >> "$output_file"
        done
    fi
done < "$input_file"

echo "Komendy monolith zostały zapisane do pliku $output_file"

 

Edytowane przez Camis
  • Thanks 1
Opublikowano (edytowane)

Nie da się ukryć, że @Camis zaproponował lepsze podejście do generowania linków, dlatego na jego bazie zrobiłem drugą wersję skryptu :)

 

@echo off
setlocal enabledelayedexpansion

REM Plik z linkami
set input_file=links.txt

REM Plik wyjsciowy
set output_file=monolith_commands.bat

REM Wyczyszczenie pliku wyjsciowego
if exist %output_file% type NUL > %output_file%

REM Wczytanie zawartosci pliku z linkami
for /f "delims=" %%a in (%input_file%) do (
	REM Ustawienie URL
	set url=%%a
	
	for /f "tokens=4,6 delims=/" %%x in ("!url!") do (
		REM pobranie nazwy tematu
		set topic=%%x
		
		REM pobranie liczby stron
		set pages=%%y
	)

	REM Wygenerowanie polecen monolih
	REM Wygenerowanie polecen dla tematu z jedna strona
	if "!pages!"=="" echo monolith https://forum.pclab.pl/topic/!topic! -o !topic!.html >> %output_file%
	
	REM Wygenerowanie polecen dla tematow z wieloma stronami
	for /L %%n in (1,1,!pages!) do (
		
		REM Wygenerowanie polecenia dla pierwszej strony
		if "%%n"=="1" (
			echo monolith https://forum.pclab.pl/topic/!topic! -o !topic!.html >> %output_file%
		) else (
			REM Wygenerowanie poleceń dla pozostalych stron
			echo monolith https://forum.pclab.pl/topic/!topic!/page/%%n -o !topic!-page-%%n.html >> %output_file%
		)
	)
)

endlocal

 

Edytowane przez Dermi
  • Thanks 2
Opublikowano

Trochę przerobiony skrypt, generuje linki i od razu zaczyna je ściągać. Dodatkowo każdy oddzielny temat zapisuje do swojego katalogu i każdą stronę kompresuję 7-zip (mi wygodniej 7-zip bo wszystko mam w tym formacie). Dzięki temu strona nie zajmuje ~8-12mb tylko około ~2-4mb. 

 

Strony które nie udało się pobrać zapisuje do oddzielnego pliku failed_file.

 

 

MBqdsIK.png

 

 

#!/bin/bash

# Plik wejsciowy z linkami
input_file="links.txt"
# Plik z nieudanymi adresami URL
failed_file="failed_links.txt"

# Usun istniejacy plik z nieudanymi linkami
rm -f "$failed_file"

# Przetwarzanie linków
while IFS= read -r line; do
    # Pomijanie linii zaczynajacych sie od #
    [[ "$line" =~ ^# ]] && continue

    # Ekstrakcja numeru strony z URL
    page_number=$(echo "$line" | grep -o 'page/[0-9]*' | cut -d'/' -f2)

    # Jesli numer strony nie istnieje, ustaw 1
    if [ -z "$page_number" ]; then
        page_number=1
    fi

    # Ekstrakcja tematu z URL (numer i tytul)
    topic=$(echo "$line" | sed -E 's|https://forum.pclab.pl/topic/([0-9]+-[^/]+)/.*|\1|')

    # Utwórz folder dla danego tematu
    mkdir -p "$topic"

    # Pobieranie strony 1 (bez /page/1, jesli jest tylko jedna strona)
    if [ "$page_number" -eq 1 ]; then
        output_file="${topic}/${topic}.html"
        command="monolith https://forum.pclab.pl/topic/$topic -t 15 -s -o $output_file"
        echo "Uruchamianie: $command"
        if ! eval "$command"; then
            echo "https://forum.pclab.pl/topic/$topic" >> "$failed_file"
        else
            7z a "${output_file}.7z" "$output_file" >/dev/null 2>&1
            rm "$output_file"
        fi
    else
        output_file="${topic}/${topic}.html"
        command="monolith https://forum.pclab.pl/topic/$topic -t 15 -s -o $output_file"
        echo "Uruchamianie: $command"
        if ! eval "$command"; then
            echo "https://forum.pclab.pl/topic/$topic" >> "$failed_file"
        else
            7z a "${output_file}.7z" "$output_file" >/dev/null 2>&1
            rm "$output_file"
        fi

        # Pobieranie stron od 2 do ostatniej
        for i in $(seq 2 "$page_number"); do
            output_file="${topic}/${topic}-page-$i.html"
            command="monolith https://forum.pclab.pl/topic/$topic/page/$i -t 15 -s -o $output_file"
            echo "Uruchamianie: $command"
            if ! eval "$command"; then
                echo "https://forum.pclab.pl/topic/$topic/page/$i" >> "$failed_file"
            else
                7z a "${output_file}.7z" "$output_file" >/dev/null 2>&1
                rm "$output_file"
            fi
        done
    fi
done < "$input_file"

echo "Proces zakonczony. Nieudane adresy zapisano w $failed_file."

 

 

 

  • Thanks 2
Opublikowano (edytowane)

Dzięki Panowie za wkład programistyczny. Daję plusiki za wysiłek i showcase skillsów 👍

 

Ja wiem, że nie trzeba AI do tego, ale bardzo chciałem też, by się każdy logicznie pokapował co i jak, żeby od początku do końca wiedział co robi 🧐


Specjalnie przygotowałem wersję dla szarego Kowalskiego, co nie ogarnia programowania. Miało być prosto i czytelnie, tylko zapomniałem wysłać załącznika 🙃

 

Tak to jest jak się po nocach siedzi. Chyba się nigdy nie zmienię :E

 

Wyślę załącznik jak będę przy kompie 🤝

 

Dajcie jeszcze instrukcje obsługi tych skryptów, bo podejrzewam, że ułamek Laba to zrozumie. Pisi to głównie hardware'owcy chyba. Nikomu nie umniejszam, ale naprawdę myślicie Panowie, że np. Off-polityczny sobie zacznie tego używać ot tak? 🤓

 

Camis, już widzę chociażby basha i Linuxa u każdego usera xD

 

Docelowo chciałem, by wszystko było uniwersalne i tworzone wspólnie. Mam pewne plany, ale potem opiszę. Na razie kopiujmy co się da, szczególnie jeśli macie pojemne dyski 👍

Edytowane przez Filip454
  • Thanks 1
  • Upvote 1
Opublikowano

Tak jak już pisałem, HTTrack jest gorszy i wolniejszy, ale jak chcesz, mogę również dla niego zrobić instrukcję zrzucania do wersji offline 👍

 

Dodam jako druga metoda, ale Monolith jest prostszy. Masz dwa pliczki i instrukcję.

 

Dodałem załącznik, zobacz jakie to proste.

Opublikowano (edytowane)
2 godziny temu, Filip454 napisał(a):

Dajcie jeszcze instrukcje obsługi tych skryptów, bo podejrzewam, że ułamek Laba to zrozumie. Pisi to głównie hardware'owcy chyba. Nikomu nie umniejszam, ale naprawdę myślicie Panowie, że np. Off-polityczny sobie zacznie tego używać ot tak? 🤓

No już nie przesadzajmy, wydaje mi się, że akurat ludzie zainteresowani archiwizacją ogarną prosty skrypt w batchu (w bashu to raczej na 95% wiedzą, o co chodzi) ;)

Ale, żeby nie było, to instrukcja jest całkiem prosta:

W katalogu ze skryptem trzeba wrzucić plik links.txt zawierający linki do ostatnich stron tematów do archiwizacji (jak w przykładzie z pierwszego posta Camisa) i uruchomić skrypt. Tyle. Po zakończeniu skryptu zostanie stworzony w tym samym katalogu kolejny plik monolith_commands.bat z poleceniami dla każdej strony do archiwizacji.

Jak mi się będzie chciało, może jeszcze skopiuję więcej od Camisa i przerobię swój skrypt, żeby od razu generował pliki ;)

 

2 godziny temu, Camis napisał(a):

To raczej plusik dla ChatGPT :E

Wypraszam sobie, jak stosuję podejście klasyczne, czyli Stack Overflow :E

Edytowane przez Dermi
Opublikowano (edytowane)
Godzinę temu, Filip454 napisał(a):

Tak jak już pisałem, HTTrack jest gorszy i wolniejszy, ale jak chcesz, mogę również dla niego zrobić instrukcję zrzucania do wersji offline 👍

 

Mi się w nim podoba to, że nie zapisuje każdej strony osobno tylko sobie można przeglądać w przeglądarce tak jak normalne forum. Kiedyś już robiłem nim mirror jakiegoś starego forum, ale tutaj trzeba by było coś poustawiać jakieś warunki bo jak tak skanuje z default settings to mam wrażenie, że on wszystko chce ściągnąć, a wystarczy żeby się ograniczył do tego co jest w danym temacie.

Edytowane przez Michaelred

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...