Art - Dodawanie danych na stronie za pomocą protokołu gadu

d3vil

Były Moderator
Dołączył
Lipiec 25, 2005
Posty
495
Dodawanie danych na stronie za pomocą protokołu gadu-gadu

Wstęp
Witam wszystkich, jestem d3vil i postaram się zademonstrować w jaki sposób możemy uzupełniać dane na stronie internetowej przy użyciu dość dobrze znanego w Polsce komunikatora Gadu-Gadu.
Po co to wszystko? Podam przykład: nachodzi nas natchnienie, żeby napisać newsa na strone, lub notki na bloga. Żeby dodać musimy wykonać szereg czynności takich jak wejście na strone, zalogowanie się i wreszcie dodanie informacji. Można to uprościć, zazwyczaj komunikator jest trzymany w tray`u lub na pasku start. Wystarczy tylko wywołać komunikator i napisać notke bezpośrednio do stworzonego przez nas bota, który automatycznie doda informacje przez nas podane na strone.

Co będzie potrzebne
- troche wolnego czasu
- konto shell z zainstalowanym apache/php/mysql/pythonem moduł do pythona MySQLdb oraz ekg z obsługą skryptów
- lub własny komputer z zainstalowanymi wyżej wymienionymi aplikacjami
- mile widziane podstawy php/mysql/pythona
smile.gif


Instalacja
Nie będe opisywać jak zainstalować poszczególne pakiety, szukarka znajdzie mase artów na temat instalacji i konfiguracji serverów
smile.gif

- opis instalacji ekg obsługującego skrypty znajdziecie na http://dev.null.pl/ekg/docs/python.txt
- opis instalacji modułu znajdziecie na http://blog.spikesource.com/mysqldb.htm

Baza danych
Najpierw zajmiemy się bazą MySQL. Logujemy się na nasze konto shell z dostępem do mysql i konta www. Wpisujemy:
mysql -u d3vil -h localhost -p
Zatwierdzamy enterem i wpisujemy hasło (nie zostanie ono wyświetlone). U mnie wyglądało to tak:
d3vil:~: mysql -u d3vil -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 5608 to server version: 5.0.22
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
Zakładając konto dostaliście przydzieloną baze lub sami ją stworzyliście. W moim przypadku, posiadając baze o nazwie 'd3vil' wpisuje
Teraz powinniśmy dostać odpowiedź 'Database changed'. Wpisujemy teraz
aby wyświetlić instniejące tabele. U mnie wygląda to tak:
mysql> show tables
Empty set (0.00 sec)
mysql>
Nie mamy jeszcze stworzonej żadnej tabeli, teraz dodamy tabele o nazwie news z polami 'id', 'autor', i 'tresc'. Pole 'id' będzie zawierać numery wiadomości, ułatwi to identyfikacje. Pole 'autor' będzie zawierać numer gg z którego zostanie dodany news lub notka. Pole 'tresc' będzie zawierało treść notki/newsa. Aby stworzyć taką tabele wpisujemy:
CREATE TABLE news (
id INT NOT NULL auto_increment,
autor VARCHAR(9),
tresc TEXT NOT NULL,
PRIMARY KEY (id));
U mnie wygląda to tak:
mysql> CREATE TABLE news (
-> id INT NOT NULL auto_increment,
-> autor VARCHAR(9),
-> tresc TEXT NOT NULL,
-> PRIMARY KEY (id));
Query OK, 0 rows affected (0.00 sec)
Teraz ponownie wpisujemy
mysql> show tables;
+-----------------+
| Tables_in_d3vil|
+-----------------+
| news |
+-----------------+
1 row in set (0.00 sec)
Tak więc baze mamy z głowy
smile.gif


Przykład w php
Najpierw stwórzmy plik "confing.php" w którym bedą zapisane dane dotyczace polączenia z bazą:

Kod:
<?

//config.php

$host = ''; //tutaj wpisujemy nasz host, zalecany wpis 'localhost'

$user = ''; //tutaj wpisujemy nazwe naszego usera, w moim wypadku 'd3vil'

$haslo = ''; //tutaj wpisujemy hasło do naszego usera

$baza = ''; //w moim przypadku 'd3vil'

mysql_connect($host,$user,$haslo);

mysql_select_db($baza);

?>

Teraz zrobimy formularz 'dodaj.php', który będzie odpowiadał za wysyłanie informacji podanych przez użytkownika do bazy
Kod:
<form action="dodawanie.php" method="post"> 

Autor:
<input type=text name=autor>
 

Tresc:
<textarea name=tresc rows="20" cols="40"></textarea>
 

<input type=submit name=submit value=dodaj> 

</form>
Dobra, teraz pora na skrypt który doda informacje z formularza do bazy danych:
Kod:
<?

include('config.php); // dołączy plik 'config.php' który odpowiada za połączenie z bazą

$autor = $_POST['autor']; //odbierze z formularza zmienną 'autor'

$tresc = POST['tresc']; //odbierze z formularza zmienną 'treść'

        $q = "INSERT INTO NEWS (id, autor, tresc) VALUES ('NULL', '$autor', '$tresc');"; //treść zapytania do bazy

        $wynik = mysql_query($q); //wykonanie zapytania

 ?>
Dobrze, teraz możemy przetestować czy skrypt działa, odpalamy przeglądarke i wchodzimy na strone, na której bedą wykonywane/odpalane skrypty. Jeżeli po wypełnieniu formularza i kliknięcia na 'dodaj' pojawi się pusta strona to znaczy że prawdopodobnie wszystko zostało dodane prawidłowo. Jeżeli wywali błąd to pewnie źle skopiowaliście lub źle ustawiliście połączenie z bazą. Przyszedł czas na odbiór danych
<

Kod:
<?

//index.php

include('config.php');

$result = mysql_query("select * from news order by id desc"); //treść zapytania do bazy

while($r=mysql_fetch_array($result)) //dopuki dane będą przechwytywane

{

$id = $r["id"];

$autor = addslashes(htmlspecialchars($r["autor"])); //zabezpieczy skrypt przed html i js

$tresc = addslashes(htmlspecialchars($r["tresc"]));

echo "$tresc
[b]Dodał:[/b] $autor<hr>";

 }

?>
To tyle, skrypt ten będzie wyświetlał wszystkie notki/newsy. Wygląd nie jest zachwycający, ale wszystko można dostosować do własnych potrzeb.

Skrypt do EKG
Teraz czas na właściwą część arta
smile.gif
Gdy mamy już zainstalowane ekg z obsługą skryptów w pythonie, oraz moduł MySQLdb możemy przejść do skryptu
<

mkdir ~/.gg/scripts
touch ~/.gg/scripts/news.py
Polecenie touch stworzy plik. Nie wykonujemy polecenia mkdir, jeżeli mamy już stworzony katalog scripts. Włączamy ulubionego edytora tekstu i zaczynamy pisać skrypt
<
U mnie wygląda to tak:
cd ~/.gg/scripts
pico news.py
Czas zabrać się za pisanie:
Kod:
#--coding:iso8859-2--

import ekg

import MySQLdb

db = MySQLdb.connect(host = 'wpisz host', user='tutaj wpisz nazwe usera', passwd='tutaj wpisz hasło', db="wpisz nazwe bazy");

cursor = db.cursor()



def init():

        ekg.printf("generic","Skrypt odpalony")

        return



def handle_msg(uin, name, msgclass, text, time, secure):

        if text == '!help':

                ekg.command('msg %s wpisz obojetnie co, aby dodac news;)'%(uin))

        else:

                cursor.execute("INSERT INTO NEWS (id, autor, tresc) VALUES ('', %s,  %s)", (uin, text))

        return 1
W pythonie bardzo ważne są wcięcia (Tab) więc nie polecałbym zmieniania wcięć
<
Czas wyjaśnić działanie skryptu:
import ekg
import MySQLdb
Import bibliotek do obsługi bazy MySQL i EKG.
db = MySQLdb.connect(host = 'wpisz host', user='tutaj wpisz nazwe usera', passwd='tutaj wpisz hasło', db="wpisz nazwe bazy");
cursor = db.cursor()
To odpowiada za połączenie z bazą.
def init():
ekg.printf("generic","Skrypt zarzadzajacy trescia odpalony
smile.gif
")
return
Wyświetla informacje po załadowaniu skryptu
def handle_msg(uin, name, msgclass, text, time, secure):
if text == '!help':
ekg.command('msg %s wpisz obojetnie co, aby dodac news
<
'%(uin))
Po otrzymaniu wiadomości, jeżeli treść to '!help' wtedy skrypt wyświetli informacje zwrotną z treścią pomocy
else:
cursor.execute("INSERT INTO NEWS (id, autor, tresc) VALUES ('', %s, %s)", (uin, text))
return 1
Każda inna treść zostanie wrzucona do bazy
<

Żeby w pico zapisać używamy kombinacji ctrl+o, żeby zamknąć ctrl+x. Uruchamiamy teraz nasz konsolowy komunikator EKG. Warto wcześniej mieć przygotowany stworzony numer Gadu-Gadu, pod który będzie łączył się nasz bot.
/set uin <nasz numerek>
/set passwd <nasze hasło>
/save
/connect
Teraz powinniśmy się pojawić 'dostępni' z numerem bota. Teraz wystarczy załadować skrypt
/python load news
oraz napisać coś do naszego bota z naszego numeru. Wynik tego wszystkiego powinien być widoczny na stronie
<


Zadania na zakończenie
Mój art dobiega końca, wszystko w nim było podawane na tacy, teraz czas drogi użytkowniku abyś Ty popracował... Powody dla których warto jeszcze troche poćwiczyć? Można zdobyć całkiem sporo umiejętności dzięki nim, można też zabić czas
<
Mój skrypt jest bardzo prosty, spróbuj udoskonalić go.
LISTA ZADAŃ:
- [python] Dodatkowe komendy, przykładowo 'uptime' czy 'date'
- [python] System autoryzacji, tylko wybrane numery mają prawo dodawać newsy/notki
- [python] Rozszeżenie informacji, rozszeż informacje wysyłane przez ekg o date i tytuł
-
PHP:
 BBcode
- [php] Panel admina z którego będziesz mógł sterować stroną poprzez przeglądarke
- [php][python] Blog sterowany przez gg (a`la ggblogasek autorstwa uw-team [img]http://www.haker.com.pl/style_emoticons/<#EMO_DIR#>/wink.gif[/img] )

[u]Zakończenie[/u]
Mój art dobiegł końca, może w przyszłości powstaną jeszcze jakieś [img]http://www.haker.com.pl/images/smilies/smile.gif[/img] 
Jak masz jakieś uwagi/propozycje to pisz na d3vil[shift plus dwa]vskeylogger.net lub d3vil[shift plus dwa]o2.pl [img]http://www.haker.com.pl/style_emoticons/<#EMO_DIR#>/wink.gif[/img] Nie zapomnij też pochwalić się o wykonaniu zadań.
Aha, jeszcze jedno. Wielkie pozdro dla Harvester`a który zasponsorował mnie w server shell, Kociaq`a który poprawił mój art oraz dla: haker.com.pl, c4f.pl, cssource.info oraz wszystkich znajomych których tutaj nie wymieniłem [img]http://www.haker.com.pl/images/smilies/smile.gif[/img]
 
Do góry Bottom