Ponieważ już dwie osoby prosiły mnie o informacje na temat bota, bo chcą napisać własne, więc odpiszę na listę.
Jeśli chodzi o mojego bota - stara wersja programu (a raczej kilku różnych programów) jest - żródła można znaleźć pod linkami ze strony http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot : http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotCalendar.java http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotDaysOfYear.java
Niestety później zmienił się na wikipedii system logowania, przez co te wersje chyba nie potrafią się logować (o ile w ogóle działają poprawnie).
Poza tym ja używałem javy, która może nie jest najlepsza, gdyż... nie zaimplementowano w niej funkcji setCookie (jest, ale ma pustą treść...) przez co musiałem to robić niskopoziomowo socketami.
W każdym razie, gdyby ktoś pisał bota, to poniżej są moje rady: * Bot po prostu symuluje użytkownika łączącego się przez HTTP (metody GET i POST) z wikipedią. Nie ma żadnego specjalnego API. * Zwróćcie uwagę, czy nie psuje japońskich liter - mój kiedyś psuł * Nie powinien zbyt często wywoływać wikipedii, bo zapcha serwer. Jak się zapytałem, co to znaczy "zbyt często" na liście, to usłyszałem, że raz na minutę. Przy tej prędkości boty nie mają sensu (szybciej wprowadzam zmiany osobiście), więc starałem się nie przekraczać 5 razy na minutę i nikt nie protestował. * Bot, kiedy się go już przetestuje, powinien mieć przez Biurokratę ustawioną flagę "bot", żeby go w ostatnich zmianach widać nie było. * Musi być jakiś mechanizm awaryjnego zatrzymywania bota przez każdego. Ja zrobiłem tak, że bot reaguje na wpisanie czegokolwiek na stronie jego dyskusji - wtedy pokazuje mu się w odpowiedzi od wiki informacja, że ma nową wiadomość. * Bot powinien sprawdzać, czy wciąż jest zalogowany. Wikipedia potrafiła czasem wylogować bota po paru godzinach pracy i potem wszyscy jęczeli, że im ostatnie zmiany zawalam, bo bot nagle stawał się widoczny. W dodatku niezalogowany bot nie wie, że przyszła do niego wiadomość, więc moją metodą nie dało się go zatrzymać. Szczęśliwie da się wtedy zablokować jego IP. * Oficjalnie bot "powinien się zatrzymać, gdy stanie się cokolwiek nieprzewidzianego" (np. zła odpowiedź od serwera). To też jest nierealne - takie boty ciągle się wysypują, bo wikipedia bardzo często jest zapchana i nie odpowiada. Lepiej po prostu w przypadku błędu serwera odczekać powiedzmy 5 minut i spróbować jeszcze raz. * Zanim nie zdobędziecie doświadczenia, lepiej uzgadniajcie na liście dyskusyjnej każdą akcję - łatwo botem coś zepsuć, trudniej naprawić. Kiedy już zdobędziecie doświadczenie, lepiej się nie pytajcie, bo zawsze się znajdzie jakiś konserwatysta, który utrąci każdy sensowny projekt. ;-)
Powodzenia,
Olaf
CzeĹÄ!
Z listy dyskusyjnej dowiedziaĹem siÄ, iĹź napisaĹeĹ kiedyĹ bota.
Jestem z wyksztaĹcenia i zawodu programistÄ , z zamiĹowaĹ wikipedystÄ :) NabraĹem chÄci, aby napisaÄ wĹasnego bota, ktĂłry pomĂłgĹby mi rozwiÄ zac kilka spraw. PrzeczytaĹem w nagĹĂłwku, Ĺźe TwĂłj bot zginÄ Ĺ wraz z komputerem. Ale pewnie piszÄ c go korzystaĹeĹ z jakichĹ materiaĹĂłw, opisĂłw, dokumentacji. MĂłgĹbyĹ mi daÄ namiar na coĹ takiego? Ewentualnie moĹźe masz gdzieĹ zrÄby swojego bota, co uĹatwiĹoby mi start?
Pozdrawiam
Piotr KuczyĹski
PS: GratulujÄ przeprowadzki :) PS2: JesteĹ zenistÄ ? Ja siÄdze po uszy w kaguy (buddyzm
tybetaĹski) :)
On Thu, Apr 28, 2005 at 06:36:09PM +0200, Olaf Matyja wrote:
Ponieważ już dwie osoby prosiły mnie o informacje na temat bota, bo chcą napisać własne, więc odpiszę na listę.
To ja może powiem, jak wygląda mój bot.
Jeśli chodzi o mojego bota - stara wersja programu (a raczej kilku różnych programów) jest - żródła można znaleźć pod linkami ze strony http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot : http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotCalendar.java http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotDaysOfYear.java
Niestety później zmienił się na wikipedii system logowania, przez co te wersje chyba nie potrafią się logować (o ile w ogóle działają poprawnie).
Relatywnie prostym sposobem jest zalogowanie się w przeglądarce i skopiowanie ciastka do bota ;-)
Zmęczyła mnie konieczność regularnego update'owania logowania, i teraz tak robię.
Poza tym ja używałem javy, która może nie jest najlepsza, gdyż... nie zaimplementowano w niej funkcji setCookie (jest, ale ma pustą treść...) przez co musiałem to robić niskopoziomowo socketami.
W każdym razie, gdyby ktoś pisał bota, to poniżej są moje rady:
- Bot po prostu symuluje użytkownika łączącego się przez HTTP (metody
GET i POST) z wikipedią. Nie ma żadnego specjalnego API.
Źle, źle :-) Jedyny słuszny sposób to Perl i LWP.
Ja swojemu botu wydaję polecenia w stylu: wpisz treść w pole wpTextbox1, kliknij na przycisk wpSave itd.
- Zwróćcie uwagę, czy nie psuje japońskich liter - mój kiedyś psuł
LWP o to też raczej dba.
- Nie powinien zbyt często wywoływać wikipedii, bo zapcha serwer. Jak
się zapytałem, co to znaczy "zbyt często" na liście, to usłyszałem, że raz na minutę. Przy tej prędkości boty nie mają sensu (szybciej wprowadzam zmiany osobiście), więc starałem się nie przekraczać 5 razy na minutę i nikt nie protestował.
"Raz na minutę" to oczywiście absurd. Ja swojego w ogóle nie limituje. Po SDI nie jest w stanie nic zepsuć.
- Bot, kiedy się go już przetestuje, powinien mieć przez Biurokratę
ustawioną flagę "bot", żeby go w ostatnich zmianach widać nie było.
Gorzej, biurokraci nie mają takie opcji, trzeba na meta go zgłosić :-)
- Musi być jakiś mechanizm awaryjnego zatrzymywania bota przez każdego.
Ja zrobiłem tak, że bot reaguje na wpisanie czegokolwiek na stronie jego dyskusji - wtedy pokazuje mu się w odpowiedzi od wiki informacja, że ma nową wiadomość.
Ja po prostu jak uruchamiam bota zawsze mam ostatnie zmiany na autorefreshu i jakby coś się działo killuję jeden przycisk i bota się wyłącza. Ale nigdy się jeszcze nic nie działo. Jedyne problemy (np. kiedyś bot nie sprawdzał czy jest [[Kategoria:X|Y]], tylko [[Kategoria:X]] i dopisywał [[Kategoria:X]] drugi raz) zauważałem po prostu masowo otwierając diffa (tak np. z 50 pierwszych edycji bota, jeden środkowy myszklik na diffa w nowej karcie w tle) w trakcie jego działania i natychmiast poprawiałem.
- Bot powinien sprawdzać, czy wciąż jest zalogowany. Wikipedia
potrafiła czasem wylogować bota po paru godzinach pracy i potem wszyscy jęczeli, że im ostatnie zmiany zawalam, bo bot nagle stawał się widoczny. W dodatku niezalogowany bot nie wie, że przyszła do niego wiadomość, więc moją metodą nie dało się go zatrzymać. Szczęśliwie da się wtedy zablokować jego IP.
- Oficjalnie bot "powinien się zatrzymać, gdy stanie się cokolwiek
nieprzewidzianego" (np. zła odpowiedź od serwera). To też jest nierealne - takie boty ciągle się wysypują, bo wikipedia bardzo często jest zapchana i nie odpowiada. Lepiej po prostu w przypadku błędu serwera odczekać powiedzmy 5 minut i spróbować jeszcze raz.
Mój bot żadnej magii tego typu nie robi - po prostu jak go puszczam to siedzę zwykle obok. Nigdy mi się też nie wylogował podczas pracy, więc nie sprawdzam tego.
W każdym razie, gdyby ktoś pisał bota, to poniżej są moje rady:
- Bot po prostu symuluje użytkownika łączącego się przez HTTP (metody
GET i POST) z wikipedią. Nie ma żadnego specjalnego API.
Ok, wszystko jasne. Tak sie zastanawiam, czy nie byloby lepiej wstepnie typowac potrzebne zmiany na podstawie najswiezszych dumpow baz danych odtorzonych lokalnie? SQL bedzie sto razy szybszy niz przegladanie stron na wiki... A moze tak wlasnie robiles?
Piotr Kuczyński
W każdym razie, gdyby ktoś pisał bota, to poniżej są moje rady:
- Bot po prostu symuluje użytkownika łączącego się przez HTTP (metody
GET i POST) z wikipedią. Nie ma żadnego specjalnego API.
Ok, wszystko jasne. Tak sie zastanawiam, czy nie byloby lepiej wstepnie typowac potrzebne zmiany na podstawie najswiezszych dumpow baz danych odtorzonych lokalnie? SQL bedzie sto razy szybszy niz przegladanie stron na wiki... A moze tak wlasnie robiles?
Tak, to dobry pomysł. Ja korzystałem z zapytań SQL niegdyś dostępnych na wiki dla sysopów. Teraz jak widzę nawet takiej opcji w specjalnych nie ma. Wtedy zresztą też nie mogli się zdecydować i raz włączali tę opcję, raz wyłączali, aż w końcu tak się pogubili, że udostępnili także kwerendy zmieniające bazę danych, dzięki czemu jednego nowego admina sam nielegalnie mianowałem, nie mogąc się interwencji Tawa doczekać ;-)
Ale wracając do kwerend - możesz wstępnie tak wybrać artykuły, ale w żadnym wypadku nie przetwarzaj w ten sposób ich treści, bo mogła się w międzyczasie zmienić. Bot musi na bieżąco pobierać treść przez sieć.
Taw:
- Nie powinien zbyt często wywoływać wikipedii, bo zapcha serwer. Jak
się zapytałem, co to znaczy "zbyt często" na liście, to usłyszałem, że raz na minutę. Przy tej prędkości boty nie mają sensu (szybciej wprowadzam zmiany osobiście), więc starałem się nie przekraczać 5 razy na minutę i nikt nie protestował.
"Raz na minutę" to oczywiście absurd. Ja swojego w ogóle nie limituje. Po SDI nie jest w stanie nic zepsuć.
Zepsuć nie, ale jak za często się bot łączy, to trudno ludziom pracować na wiki. Jakieś ograniczenie jest moim zdaniem potrzebne, inaczej to przypomina atak Denial of Service. No chyba, że puszczasz bota na jakimś małym zbiorze stron, to ok. Ja czasem parę tysięcy artykułów hurtem przerabiałem (np. całe kalendarium). Lzur kiedyś zrobił taki numer z nielimitowanym botem i go wyklęli na en-wiki a i u nas była gorąca dyskusja typu "precz z botami". Ale może teraz już jest lepiej, nie wiem, dawno tu nie zaglądałem.
- Bot, kiedy się go już przetestuje, powinien mieć przez Biurokratę
ustawioną flagę "bot", żeby go w ostatnich zmianach widać nie było.
Gorzej, biurokraci nie mają takie opcji, trzeba na meta go zgłosić :-)
Ech, a kiedyś to było takie proste. Zaraz, a Ty, Taw, jako supersupernadzorca już nie masz uprawnień do grzebania w bazie ?
- Musi być jakiś mechanizm awaryjnego zatrzymywania bota przez każdego.
Ja po prostu jak uruchamiam bota zawsze mam ostatnie zmiany na autorefreshu i jakby coś się działo killuję jeden przycisk i bota się wyłącza.
No tak, ja czasem zapuszczałem bota na dwie doby, więc wolałem żeby taki mechanizm był. Co prawda był potrzebny tylko raz i akurat wtedy nie zadziałał z powodu automatycznego wylogowania :-(
- Bot powinien sprawdzać, czy wciąż jest zalogowany. Wikipedia
potrafiła czasem wylogować bota po paru godzinach pracy i potem wszyscy jęczeli, że im ostatnie zmiany zawalam, bo bot nagle stawał się widoczny.
Mój bot żadnej magii tego typu nie robi - po prostu jak go puszczam to siedzę zwykle obok. Nigdy mi się też nie wylogował podczas pracy, więc nie sprawdzam tego.
To pewnie znowu kwestia czasu pracy na jednym ciasteczku albo wersji oprogramowania wikipedii.
Olaf
On Fri, Apr 29, 2005 at 08:07:58PM +0200, Olaf Matyja wrote:
Ale wracając do kwerend - możesz wstępnie tak wybrać artykuły, ale w żadnym wypadku nie przetwarzaj w ten sposób ich treści, bo mogła się w międzyczasie zmienić. Bot musi na bieżąco pobierać treść przez sieć.
Mój bot chyba też robił tego typu offline analizy kilka razy, ale tylko do selekcji jakimi artykułami się zająć.
"Raz na minutę" to oczywiście absurd. Ja swojego w ogóle nie limituje. Po SDI nie jest w stanie nic zepsuć.
Zepsuć nie, ale jak za często się bot łączy, to trudno ludziom pracować na wiki. Jakieś ograniczenie jest moim zdaniem potrzebne, inaczej to przypomina atak Denial of Service. No chyba, że puszczasz bota na jakimś małym zbiorze stron, to ok. Ja czasem parę tysięcy artykułów hurtem przerabiałem (np. całe kalendarium). Lzur kiedyś zrobił taki numer z nielimitowanym botem i go wyklęli na en-wiki a i u nas była gorąca dyskusja typu "precz z botami". Ale może teraz już jest lepiej, nie wiem, dawno tu nie zaglądałem.
Mamy z 20 razy tyle mocy co rok temu. A bot nie zapycha nic, bo robi jedno połączenie na raz. Następne robi jak poprzednie się skończy.
Gorzej, biurokraci nie mają takie opcji, trzeba na meta go zgłosić :-)
Ech, a kiedyś to było takie proste. Zaraz, a Ty, Taw, jako supersupernadzorca już nie masz uprawnień do grzebania w bazie ?
Technicznie to się da, ale oficjalne procedury są trochę na około, żeby maksymalnie oddzielić development+administrację serwerami od zarządzania treścią.
No tak, ja czasem zapuszczałem bota na dwie doby, więc wolałem żeby taki mechanizm był. Co prawda był potrzebny tylko raz i akurat wtedy nie zadziałał z powodu automatycznego wylogowania :-(
Jak nie limitujesz to w 2 doby przekopie wszystkie strony 10 razy :-) Limitowanie pogarsza kontrolę nad botem, nie poprawia.
Olaf Matyja napisał(a):
http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotCalendar.java http://pl.wikipedia.org/wiki/Wikipedysta:Olafbot/OlafbotDaysOfYear.java
A propo kalendarzy. Czy dałoby się poprawić 12 szablonów "Kalendarz na <nazwa miesiąca>", tak aby były adekwatne do roku 2005 a nie 2004?
{{Kalendarz na maj}} np pokazuje, że 1 maja będzie w sobotę.
Kotasik
A propo kalendarzy. Czy dałoby się poprawić 12 szablonów "Kalendarz na <nazwa miesiąca>", tak aby były adekwatne do roku 2005 a nie 2004?
{{Kalendarz na maj}} np pokazuje, że 1 maja będzie w sobotę.
Kotasik
Ależ proszę bardzo :-) Trzeba tylko ręcznie przeedytować strony [[Szablon:Kalendarz_na_<nazwa miesiąca>]]. Na przykład tutaj: http://pl.wikipedia.org/w/index.php?title=Szablon:Kalendarz_na_maj&actio... Każdy może to zrobić, także Ty.
Mój bot nigdy tego nie robił, to późniejszy pomysł. Możesz dla ułatwienia skorzystać z kalendarza na stronie [[2005]] i skopiować odpowiednie fragmenty. No chyba że Tsca ma do tego program - to faktycznie powinien to zmienić.
Olaf