Pobieranie pliku pgn z forumowej przeglądarki

Moderator: mrozik

Pobieranie pliku pgn z forumowej przeglądarki

Postprzez biniek » 23 lip 2013, 09:13

Czy istnieje możliwość takiego skonfigurowania forumowej przeglądarki partii, aby za pomocą kliknięcia można było pobrać zapis partii w formacie PGN?
Avatar użytkownika
biniek
 
Posty: 159
Dołączył(a): 10 lut 2012, 20:06
Podziękował : 112 razy
Otrzymał podziękowań: 102 razy
Ranking: 0
kurnik.pl: biniek
FICS: biniek

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez kolokwium » 23 lip 2013, 09:56

Sam zapis wystarczy zaznaczyć i skopiować, a jak się chce całość, to po cytowaniu. Aby to robić jednym kliknięciem, to zapewne potrzeba znać odpowiednie kody aby dopisać do skryptu.
Kiedyś grałem dla kategorii, teraz dla przyjemności; sędzia szachowy FA Tomasz Ptaszyński mój blog
ObrazekPiszę poprawnie po polsku.
Avatar użytkownika
kolokwium
Moderator
 
Posty: 8805
Wiek: 52
Dołączył(a): 04 wrz 2006, 22:11
Lokalizacja: www.ChessArbiter.org
Podziękował : 1842 razy
Otrzymał podziękowań: 2059 razy
Ranking: 0
kurnik.pl: tpp
FICS: tepepe

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez biniek » 23 lip 2013, 11:21

kolokwium napisał(a):Sam zapis wystarczy zaznaczyć i skopiować, a jak się chce całość, to po cytowaniu. Aby to robić jednym kliknięciem, to zapewne potrzeba znać odpowiednie kody aby dopisać do skryptu.

W związku z tym, że obok diagramu wyświetlają się symbole figur założyłem że CTRL+C nic nie da, a tu taka miła niespodzianka. Cytowanie wyświetla pełny PGN razem z nagłówkiem, co w zupełności mi wystarcza.
Dziękuję za pomoc.
Avatar użytkownika
biniek
 
Posty: 159
Dołączył(a): 10 lut 2012, 20:06
Podziękował : 112 razy
Otrzymał podziękowań: 102 razy
Ranking: 0
kurnik.pl: biniek
FICS: biniek

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez fuszer » 24 lip 2013, 12:54

Można też użyć konsoli JavaScript. Nie wiem, jak to działa w innych przeglądarkach, ale pod Chrome wystarczy wpisać w niej magiczny kod:
Kod: Zaznacz cały
var pgns = []; for (var i = 1; i < pgn4webTextareaIdNum; ++i) { pgns.push(document.getElementById('pgn4web_' + i).value); }; pgns

Kod wpisujemy w jednym wierszu. Po zatwierdzeniu enterem dostajemy listę wszystkich pgn-ów z bieżącej strony

Pojedynczą partię można wyświetlić poleceniem
Kod: Zaznacz cały
document.getElementById('pgn4web_#').value

- w miejsce # podstawiamy numer partii na stronie

Jest to o tyle wygodniejsze niż rozwiązanie z cytowaniem, że w przypadku postów z długim tekstem oprócz partii nie musimy przegrzebywać się do znaczników [pgn]

A co, niech się forumowicze pobawią w webowych hakerów :devil:
fuszer
 
Posty: 994
Wiek: 38
Dołączył(a): 25 wrz 2012, 18:13
Lokalizacja: Kraków
Podziękował : 234 razy
Otrzymał podziękowań: 906 razy
Ranking: 2096
kurnik.pl: fuszer
FICS: swirus

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez biniek » 24 lip 2013, 14:24

Fuszer - bomba!
Pozwolę sobie jednak jeszcze pociągnąć temat i dopytać czy:
1. Istnieje możliwość dodania do skryptu javy kodu który:
a) usunąłby niepotrzebne znaki tak, aby wygenerować tekst zgodny z formatem PGN
b) wyeksportuje tak wygenerowany tekst do wskazanego pliku zewnętrznego
2. W Chromie jest możliwość stworzenia skrótu klawiaturowego, który automatycznie otworzyłby konsolę i uruchomił ten skrypt?
Avatar użytkownika
biniek
 
Posty: 159
Dołączył(a): 10 lut 2012, 20:06
Podziękował : 112 razy
Otrzymał podziękowań: 102 razy
Ranking: 0
kurnik.pl: biniek
FICS: biniek

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez fuszer » 24 lip 2013, 15:45

Usuwanie niepoprawnych znaków jest jak najbardziej możliwe, zapis na dysku nieco trudniejszy, ale również do zrealizowania

Nie znam metody przypisania skrótu do uruchomienia konkretnego skryptu w konsoli, można natomiast stworzyć rozszerzenie chrome, które pojawi się jako przycisk obok paska adresu. Bardziej zaawansowane rozszerzenie mogłoby dodawać przycisk bezpośrednio na stronach forum - wtedy klikałbyś bezpośrednio obok diagramu z partią

Jak znajdę nieco czasu, mógłbym pobawić się w napisanie takiego rozszerzenia - skłoniłbym może więcej osób do używania mojej ulubionej przeglądarki :D
fuszer
 
Posty: 994
Wiek: 38
Dołączył(a): 25 wrz 2012, 18:13
Lokalizacja: Kraków
Podziękował : 234 razy
Otrzymał podziękowań: 906 razy
Ranking: 2096
kurnik.pl: fuszer
FICS: swirus

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez fuszer » 24 lip 2013, 20:12

Na szybko ulepszyłem skrypt, by był bardziej interaktywny.

Nowa wersja:
Kod: Zaznacz cały
(function () {
    function create_button(doc, title, pgn) {
        var link = document.createElement('A');
        link.href = "data:application/x-chess-pgn;charset=utf8," + encodeURI(pgn.replace(/\]\s*/g, "]\n"));
        var button = doc.createElement('BUTTON'); button.type = 'button'; button.textContent = title; button.addEventListener('click', function() { link.click(); }, false);
        return button;
    }
    function process(id) {
        var pgn = document.getElementById(id);
        if (!pgn) return '';
        var doc = pgn.nextElementSibling.nextElementSibling;
        if (!(doc instanceof HTMLIFrameElement)) return '';
        doc = doc.contentDocument;
        var moves = doc.getElementById('ShowPgnText');
        if (!moves) return '';
        var text = pgn.value;
        var button = create_button(doc, 'Zapisz pgn', text);
        moves.parentNode.insertBefore(button, moves.nextElementSibling);
        moves.parentNode.insertBefore(doc.createElement('BR'), button);
        return text + '\n\n';
    };
    var whole_pgn = '';
    for (var i = 1; i < pgn4webTextareaIdNum; ++i) {
        whole_pgn += process('pgn4web_' + i);
    }
    if (whole_pgn.length > 0) {
        var body = document.getElementById('page-body');
        if (body && body.firstElementChild) {
            var button = create_button(document, 'Zapisz wszystkie partie jako pgn', whole_pgn);
            body.firstElementChild.appendChild(button);
            button.parentNode.insertBefore(document.createTextNode('            '), button);
        }
    }
})()


Po uruchomieniu go na stronie zawierającej partie przy każdej kontrolce pgn pojawi się magiczny przycisk "Zapisz pgn", którego wciśnięcie skutkuje zapisaniem partii przypisanych do danej kontrolki w formacie pgn.
Dodatkowo po tytule postu pojawia się przycisk umożliwiający zapisanie jednego pliku pgn łączącego wszystkie partie z bieżącej strony.

Konsolkę js uruchamiamy w Chrome skrótem Ctrl+Shift+J:
konsola.JPG
Konsola js w Chrome


Po wklejeniu treści skryptu (jeśli zamiast wkleić kod zdecydujemy się go ręcznie wpisać, należy pamiętać, żeby nie robić nowych linii albo używać do tego celu kombinacji Shift+Enter) i wciśnięciu entera powinny się pojawić przyciski jak tutaj:
przyciski.jpg
Efekt działania skryptu


Kliknięcie przycisku działa jak próba ściągnięcia pliku ze strony:
download.jpg
Działanie nowych przycisków


Jedynym mankamentem jest brak możliwości wybrania nazwy pliku (javascript nie pozwala na bezpośrednie operowanie na dysku ze względów bezpieczeństwa - gdyby plik był generowany po stronie serwera, mógłby mieć nazwę w znaczniku href, jednak w przypadku tego skryptu generowany jest strumień danych, który przeglądarka potrafi "ściągnąć" i zapisać na dysku). Dlatego pod Chrome pliki trafiają do domyślnego folderu pobierania i nazywane są Pobrane, Pobrane (1) itd.
fuszer
 
Posty: 994
Wiek: 38
Dołączył(a): 25 wrz 2012, 18:13
Lokalizacja: Kraków
Podziękował : 234 razy
Otrzymał podziękowań: 906 razy
Ranking: 2096
kurnik.pl: fuszer
FICS: swirus

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez biniek » 24 lip 2013, 20:25

Prawie idealnie. To, że nie można wybrać nazwy pliku nie stanowi (przynajmniej dla mnie) żadnego problemu. Jedyne czego by mi do pełni szczęścia brakowało, to ominięcie konieczności otwierania konsoli, kopiowania twojego skryptu i wklejania go do konsoli. A w zasadzie nie tyle ominięcie, co zautomatyzowanie w taki sposób, by dla użytkownika było to jedno kliknięcie lub skrót klawiaturowy.

Tak czy siak - świetna robota Fuszer.
Avatar użytkownika
biniek
 
Posty: 159
Dołączył(a): 10 lut 2012, 20:06
Podziękował : 112 razy
Otrzymał podziękowań: 102 razy
Ranking: 0
kurnik.pl: biniek
FICS: biniek

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez Grem » 25 lip 2013, 00:22

Skrypt fajny tylko nie wiem czemu nie mogę normalnie wkleić po otwarciu konsoli a wpisywanie ręcznie łatwo o pomyłkę i zajmuje sporo czasu.
Tylko ten nie popełnia błędów, kto nic nie robi - Napoleon Bonaparte
Avatar użytkownika
Grem
 
Posty: 379
Wiek: 52
Dołączył(a): 03 lut 2012, 13:24
Lokalizacja: pow.Lipsko
Podziękował : 102 razy
Otrzymał podziękowań: 179 razy
Ranking: 0
kurnik.pl: Gremar64
FICS: Gremar

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez Rafcik » 25 lip 2013, 16:31

Szukajcie kilku opcji ukrytych pod polami. ;-)
"W konfrontacji strumienia ze skałą, strumień zawsze wygrywa - nie przez swoją siłę, ale przez wytrwałość." - Budda
Avatar użytkownika
Rafcik
Administrator
 
Posty: 2245
Dołączył(a): 10 wrz 2006, 07:22
Lokalizacja: Białystok
Podziękował : 88 razy
Otrzymał podziękowań: 368 razy
Ranking: 2268

Re: Pobieranie pliku pgn z forumowej przeglądarki

Postprzez fuszer » 25 lip 2013, 17:58

Dla niezadowolonych z braku automatyzacji oraz doświadczających problemów z wklejeniem skryptu mam dobrą wiadomość!

Skrypt przerobiłem na proste rozszerzenie do Chrome, które automatycznie wstawia przyciski ściągania pgn na stronkach z szachowe.pl.


chrome_pgn.crx
Rozszerzenie Chrome do pobrania (poprawione)
(1.98 KiB) Pobrane 175 razy


Teoretycznie Chrome posiada API do wymuszenia okienka Zapisz jako... przy ściąganiu, ale niestety nie działa to u mnie pomimo włączenia eksperymentalnych API rozszerzeń. Tak więc ściąganie nadal generuje pliki z domyślną nazwą i kolejnymi numerkami (myślę jednak, że automatyczne dodawanie przycisków po otwarciu postu z partiami powinno to zrekompensować).

Plik trzeba rozpakować (ja używam do tego FAR-a, ale crx to format oparty na zip, więc powinno się dać winzipem czy 7zipem). Niestety od którejś tam wersji Chrome nie można instalować rozszerzeń z paczki spoza Google Store (jeśli znajdą się chętni do zamieszczenia tam mojego rozszerzenia, to udzielam im pełnego błogosławieństwa - wtedy będzie je można zainstalować w przeglądarce jednym kliknięciem).

Pod adresemchrome://extensions mamy możliwość zainstalowania rozszerzenia rozpakowanego. Trzeba tylko włączyć opcję "Tryb programisty".

Rozszerzenie jest bardzo proste i nie można go konfigurować, nie posiada nawet ikonki, bo nie umiem rysować :P Mimo wszystko działa i automatyzuje odpalanie mojego magicznego skryptu (rozszerzenie używa nieco zmodyfikowanej wersji ze względu na ograniczenia skryptów rozszerzeń).

Jest szansa, że w kolejnej wersji dodam okienko "Zapisz jako...", bo HTML5 umożliwia pewne interakcje skryptów z systemem plików.

Nie ma szansy, żebym zrobił to dla innych przeglądarek, bo szkoda mi miejsca na dysku i czasu potrzebnego do ich instalowania. W kwestii przeglądarek jestem równie niereformowalny, jak przy wyborze debiutów ;D

Zapraszam do pobrania rozszerzenia i przetestowania jego działania

  Powód edycji: Wprowadziłem drobną poprawkę, rozszerzenie nie uruchamiało się automatycznie po zamknięciu i ponownym uruchomieniu przeglądarki.
Proszę ściągnąć jeszcze raz, jeśli pobraliście pierwotną wersję.

Przepraszam za niedogodność, ale to moje pierwsze doświadczenia z rozszerzeniami
fuszer
 
Posty: 994
Wiek: 38
Dołączył(a): 25 wrz 2012, 18:13
Lokalizacja: Kraków
Podziękował : 234 razy
Otrzymał podziękowań: 906 razy
Ranking: 2096
kurnik.pl: fuszer
FICS: swirus


Powrót do Informacje, pomysły i propozycje

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość



REKLAMA

Gdy masz problemy z matma czasami najlepszym rozwiazaniem sa Korepetycje z Matematyki
Zadania Szachowe