niedziela, 1 lutego 2009

Nasza-Klasa: pobieranie zdjęć - poprawiona wersja

UWAGA: Sktypt ma wyłącznie na celu pokazanie możliwości języka Python i jego bibliotek. Autor nie ponosi żadnej odpowiedzialności za działania skryptu oraz straty nim spowodowane, pamiętaj korzystasz z niego na własną odpowiedzialność. Przed skorzystaniem upewnij się, że jego działanie jest zgodne z regulaminem serwisu Nasza-Klasa.

Nawiązując do mojego wcześniejszego posta , po drobnym researchu wyciągnełem kilka wniosków, które zaowocowały drugą wersją sktyptu.

Po pierwsze nie musimy się już przejmować ciastkami( cookies) za to lista parametrów programu wydłużyła się o 2 i teraz wygląda tak:

nasza-klasa.py TwójLoginDoNK TwojeHasło IdOsobyKtórejZdjeciaChcemyPobrać MaxZdjeć

przy czym czwarty parametr jest opcjonalny i jeżeli nie wpiszemy nic - to przyjmie domyślną wartość - 50.

Po Drugie: jak zauważyłem RSS zwraca tylko 10 ostatnich zdjęć ( da sie pobrać RSSa dla wszystkich zdjęć?) , wiec ten pomysł na razie odpada.

zobacz kod: kod
pobierz: nasza-klasa.py

enjoy.

Ściąganie wszystkich zdjęć wybranego użytkownika z portalu Nasza-Klasa

UWAGA: Sktypt ma wyłącznie na celu pokazanie możliwości języka Python i jego bibliotek. Autor nie ponosi żadnej odpowiedzialności za działania skryptu oraz straty nim spowodowane, pamiętaj korzystasz z niego na własną odpowiedzialność. Przed skorzystaniem upewnij się, że jego działanie jest zgodne z regulaminem serwisu Nasza-Klasa.

Napisałem prosty skrypcik do sciągania n pierwszych zdjęć użytkownika o znanym Id na Naszej-Kasie. Już tłumaczę jak on działa i co porzebujemy:

1) musimy mieć konto w serwisie Nasza-Klasa
2) musimy znać id użytkownika, którego zdjęcia chcemy pobrać: można je łatwo znaleść na przykład w pasku adresu url( http://nasza-klasa.pl/profile/xxxxxxx, gdzie xxxxxxx to właśnie to Id)
3) ponieważ mój sktypt jest troche prymitywny:) i nie sprawdza ilośći zdjęć naszego użytkownika musimy podać ile zdjęć chcemy ściągnąć - ale tu można podać spokojnue większą liczbe, bo skrypt jest odporny na błędny
4) i wreszcie najważniejsze: musimy mieć zainstalowanego pythona i parę bibliotek( przypuszczam że wszyskie są w katalogu lib Pythona)
5) WAŻNE: musimy pobrać cookie zalogowanego użytkowika, bo jak na razie skrypt tego nie robi, i wpisać je do zmiennej:

cookies = 'remember_me=...; __utma=...; cookies += ' nk_session=...'

polecam Live HTTP Header do tego celu, można je znaleść też w przeglądarce( Firefox2: Narzędzia->Opcje->Wyświetl Ciasteczka->'wpisujemy w filtrze: nasza-klasa'->i odczytujemy poszczególne ciastka)

jak uruchamiać?:

Linux:
$ python nasza-klasa.py Id max (np. $ python nasza-klasa.py 1234567 50)
Windows:
start->cmd i wpisujemy: nasza-klasa.py Id max

no i źródła:

nasza-klasa.py

miłej zabawy, pozdro

TO DO:
* ułatwić podawanie cookies
* oprzeć silnik na RSS/XML

piątek, 7 listopada 2008

LAMP na (X/K) Ubuntu

Ponieważ ostatnimi czasy czesto udaje mi sie rozsypać ubuntu, mniej więcej z taką szybkością z jaką sie instaluje :) postanowiłem zautomatyzowac proces instalowania LAMP'a - Linux Apache MySql PHP.

Proces trwa porównywalnie z instalacją na przykład XAMPP'a pod Windowsem, ale nikt nie przekona mnie do instalacji Apacha pod tym systemem. No chyba, że chcesz sobie zrobić stronke składającą sie maxymalnie z 8 plików html połączonych linkami:)

A teraz jak to zrobić pod łubuntu:

plik lampInstaller.sh

#! /bin/bash

echo 'LAMP installer for Ubuntu'

sudo apt-get install apache2

sudo apt-get install php5-apache2-mod-bt
sudo apt-get install php5-suhosin
sudo apt-get install php5-mysql

#php cli - command line interface

#sudo apt-get install php5-cli

#Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch Server at localhost Port 80

# http://localhost:80/ -> It works!

sudo apt-get install mysql-server-5.0

# GUI w Applications->Programowanie

sudo apt-get install mysql-admin
sudo apt-get install mysql-query-browser

I to wszystko:)

Oczywiście apache, php oraz mysql instaluje sie w domyślnych lokalizacjach(/etc/...) i z domyślną konfiguracją. W celu dopasowania do własnych potrzeb należy pogrzebać w odpowiednich plikach konfiguracyjnych(/etc/apache2/apache2.conf, php.ini itp)

Do developowania konfiguracja jest całkowicie wystarczająca.

I jeszcze bonus script:

lamp.sh

#! /bin/bash

function startLamp() {
sudo /etc/init.d/apache2 start
sudo /etc/init.d/mysql start
}


function stopLamp() {
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/mysql stop
}

function restartLamp() {
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/mysql restart
}


#echo 'Lamp start/stop/restart script'
# more info: http://www.debian-administration.org/articles/28

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting lamp..."
startLamp
;;
stop)
echo "Stopping lamp..."
stopLamp
;;
restart)
echo "Restarting lamp..."
restartLamp
;;
*)
echo "Usage: lamp.sh {start|stop|restart}"
exit 1
;;
esac

echo 'Done'

exit 0

sobota, 1 listopada 2008

Jak pozbyć sie reklam na ugu.pl

Wygląda na to, że ugu coraz bardziej podnosi poprzeczkę
Ale trzeba być twardym :)

Najpierw przeanalizujmy gdzie wstawiane są reklamy:

Pierwsza zaraz po sekcji :

<body><noscript>noscript>
<div>
<script type="text/javascript" src="http://img.ugu.pl/advert.js">
</script>
</div>

a druga przed </body>
<script type="text/javascript">
var pageTracker = ...
pageTracker._trackPageview();
</script>

Najprostrzym rozwiązanie będzie po prostu wyrzucić sekcję <body>, a kod strony wstawiać między
<html
<head>
</head>
zawartosc strony
</html>

W prawdzie tracimy zgodność, ze standardami W3C,
ale większość przeglądarek wyświetli naszą stronę poprawnie.
Niestety ugu posunęło sie dalej i jeśli nie znajdzie w kodzie HTMLa napisu
<body>to wstawi na poczatku strony kod:

<html><body><!-- --><noscript></noscript>
<div>
<script type="text/javascript" src="http://img.ugu.pl/advert.js">
</script>
</div>


można to łatwo ukryć w CSSie:

body
{
...
margin-top: -100px;
position: relative;
...
}

i reklama jest niewidoczna:)

Powodzenia

Mam nadzieje, że "specjaliści" z ugu znowu czegoś nie wymyślą:)

niedziela, 26 października 2008

Bot gadu-gadu z wykorzystaniem EKG i Python'a

Opiszę jak w prosty sposób napisać własnego bot'a gg.
Wymagana jest podstawowa znajomość języka Python i środowiska Linux.

Użytkownicy [x/k]Ubuntu mogą pobrać EKG z repozytorium wpisując:
sudo apt-get install ekg
warto też zainstalowa najnowszą wersje Pythona
sudo apt-get install python
pozstali muszą skompilować ze źródeł.
A teraz do dzieła:

odpalamy ekg: #ekg

wpisujemy
set uin 'numer gg'
set password 'hasło'
save

teraz czas zacząc pisać bota:
przechodzimy do katalogu ~/.gg/
tworzymy katalog scripts (#mkdir scripts)

i tu tworzymy plik najlepiej z rozszerzeniem .py

jeśli chcemy by nasz skrypcik odpalał sie zaraz po uruchomieniu EKG w katalogu scripts tworzymy kolejny katalog: autorun i tu wrzycamy nasz plik.
stuktura programu:

# importujemy bibliotekę ekg
import ekg

#ta funkcja wywołuje się przy starcie skryptu
def init():
ekg.printf("generic","Bot loaded");
#ustawiamy opis
ekg.command("_descr \"Opis\"");
return 1

#ta funkcja wywołuje się przy zamykaniu skrypu
def deinit():
ekg.printf("genetic","Bot unloaded");
logfile.close()

#przechwytywanie zdarzeń:
def handle_msg(uin, name, msgclass, text, time, secure):

uin - numer gg od którego przyszła wiadomość
text - treść wiadomości
time - czas nadejscia

pozostałe parametry są raczej mniej istotne.

Zabawa polega na tym, aby przechwycić text i odpowiednio na niego odpowiedzieć.

Jak narazie napisałem prosty kalkulator.



Ale zamierzam napisać coś znacznie ciekawszego:)

I jeszcze wywołanie skryptu: w konsolce ekg:
python (un)load nazwa_skryptu.py

środa, 13 sierpnia 2008

Funkcja do sprawdzania poprawnosci kodu pocztowego* w JavaScripcie

function validatePostalCode(inputCode){

var correct = /^[\-]{0,1}[0-9]{2}-[0-9]{3}$/;
if(!correct .test(inputCode)
alert('kod pocztowy ma niepoprawny format \n (poprawny: xx-xxx)');
}

*dotyczy polskich kodów pocztowych

czwartek, 24 lipca 2008

Python, biblioteka urllib(2) i dodatkowe aspekty bezpieczeństwa aplikacji webowych

urllib (2) jest biblioteką Pythona do pobierania plików poprzez adres url,
dodatkowo umożliwia manipulację całego zapytania, pozwala na tworzenie własnego nagłówka zapytania cz manipulację ciasteczek, a nawet wysyłanie POST content'u.

Przyjrzyjmy sie prostej funkcji:

zobacz

zmienne user_agent i user_agent2 zawierają zmienną naszego agenta czyli tak jak zazwyczaj przedstawia się przeglądarka internetowa.

Za zmienną user_agent możemy podstawić dowolnego stringa w tym taki xml'owe (html'owe) a nawet kod dowolnego języka najlepiej skryptowego.

Jeżeli nieuważny webmaster posiada na swoim serwerze system do przeglądania statystyk, który wyświetla wszystkie informacje o użytkownikach, którzy przeglądali strony może nieświadomie uruchomić JavaScript, który podrzucimy mu w zmiennej user_agent. Oczywiście ten alert() w przykładzie jest bardzo subtelny, równie dobrze można by tam dorzucić jakiś XSS.



kolejna zmienna zawiera ciasteczka w naszym przypadku PHPSESSID.
Różna może być reakcja skryptu na serwerze w przypadku, gdy zmienna sesji posiada niedozwolone znaki. Polecam to sprawdzić.

funkcja save_it(url, filename, proxy, port) zapisuje zawartość strony zawartej pod adresem url do pliku filename, a jeśli zmienna proxy jest różna od None to połączenie odbywa się przez serwer proxy na podanym porcie.

Na koniec dorzucam jeszcze skrypt do wysyłania POST contentu:

zobacz