<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MGdevelop &#187; PHP &amp; MySQL</title>
	<atom:link href="http://mgdevelop.pl/index.php/kategoria/webdeveloping/php-mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://mgdevelop.pl</link>
	<description>Programming is an art form that fights back</description>
	<lastBuildDate>Thu, 07 Jul 2011 16:59:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Obsługa protokołu GG w PHP</title>
		<link>http://mgdevelop.pl/index.php/2010/07/obsluga-protokolu-gg-w-php/</link>
		<comments>http://mgdevelop.pl/index.php/2010/07/obsluga-protokolu-gg-w-php/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 22:31:45 +0000</pubDate>
		<dc:creator>Elektryk</dc:creator>
				<category><![CDATA[PHP & MySQL]]></category>
		<category><![CDATA[Gadu-Gadu]]></category>
		<category><![CDATA[komunikator]]></category>
		<category><![CDATA[protokół]]></category>
		<category><![CDATA[wiadomości]]></category>

		<guid isPermaLink="false">http://mgdevelop.pl/?p=278</guid>
		<description><![CDATA[Witam w poradniku z którego będzie można się dowiedzieć w jaki sposób można wysyłać wiadomości z poziomu PHP do najpopularniejszej... <a href="http://mgdevelop.pl/index.php/2010/07/obsluga-protokolu-gg-w-php/">Czytaj dalej&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Witam w poradniku z którego będzie można się dowiedzieć w jaki sposób można wysyłać wiadomości z poziomu PHP do najpopularniejszej w Polsce sieci komunikatorów, sieci Gadu-Gadu. Ta wiedza da nam możliwość tworzenia szybkich i skutecznych systemów powiadamiania internautów o nowych postach czy wydarzeniach na naszych stronach internetowych. Zaczynamy!<br />
<span id="more-278"></span></p>
<h1>Początek przygody</h1>
<p>Aby zacząć pisać skrypt do wysyłania wiadomości na GG musimy wpierw pobrać mały plik z klasą do obsługi protokołu. Jest  on do pobrania <a title="Klasa do obslugi protokolu gadu-gadu" href="http://lgpl.nastal.pl/rfGG.class.zip">tutaj</a>. Wypakowywujemy go, dołączamy do naszego skryptu a także tworzymy obiekt tej klasy:</p>
<pre class="brush: php">require_once('rfGG.class.php');
$GG = new rfGG(rfGG::VER_77);</pre>
<p>Teraz musimy używając aplikacji GG lub innego zgodnego komunikatora np AQQ utworzyć konto dla naszego bota który będzie rozsyłał wiadomości. Nie możemy używać naszego konta. Gdy już mamy nowy numer i hasło możemy przystąpić do próby nawiązania połączenia z serwerem GG.</p>
<pre class="brush: php">if ($GG-&gt;connect('123456789','hasłobota')) {
   $GG-&gt;disconnect();
}</pre>
<div>Działanie powyższego kodu jest krótkie, łączy się on z serwerem za pomocą podanych informacji a następnie jeśli wszystko pójdzie pomyślnie rozłącza się zmieniając status na niedostępny.</div>
<h1>Zmiana statusu i opisu</h1>
<p>Klasa rfGG posiada funkcję changeStatus() która służy do zmiany statusu oraz opisu konta bota.</p>
<pre class="brush: php">if ($GG-&gt;connect('123456789','hasłobota')) {
   $GG-&gt;changeStatus(rfGG::STATUS_BUSY_DESCR,'Code is poetry');
   //tutaj jakiś kod...
   $GG-&gt;disconnect('nie ma mnie');
}</pre>
<p>W tym przykładzie ustawiliśmy status na STATUS_BUSY_DESCR a opis na <em>Code is poetry</em>. Poniżej zamieszczam listę wszystkich statusów oraz ich znaczeń.</p>
<ul>
<li>STATUS_NOT_AVAIL &#8211; niedostępny</li>
<li>STATUS_NOT_AVIAL_DESCR &#8211; niedostępny z opisem</li>
<li>STATUS_AVAILABLE<span style="white-space: pre;"> </span>- dostępny</li>
<li>STATUS_AVAILABLE_DESCR &#8211; dostępny z opisem</li>
<li>STATUS_BUSY<span style="white-space: pre;"> </span>- zajęty (zaraz wracam)</li>
<li>STATUS_BUSY_DESCR<span style="white-space: pre;"> </span> &#8211; zajęty z opisem</li>
<li>STATUS_INVISIBLE &#8211; niewidoczny</li>
<li>STATUS_INVISIBLE_DESCR &#8211; niewidoczny z opisem</li>
</ul>
<p>Przy statusach z opisem trzeba jako drugi argument funkcji podać tekst który będzie wyświetlany jako opis. Funkcja <em>disconnect()</em> służąca do rozłączania z serwerem automatycznie zmienia status na niedostępny i ewentualnie ustawia przekazany jej argument jako opis. W powyższym przykładzie skorzystaliśmy z tej możliwości i ustawiliśmy opis na <em>nie ma mnie</em>.</p>
<h1>Wysyłanie wiadomości</h1>
<p>Proszę zapiąć pasy ponieważ przechodzimy do ważnej części poradnika. Zajmijmy się teraz wysyłaniem wiadomości. Gdy już jesteśmy zalogowani w serwerze GG możemy to zrobić za pomocą odpowiedniej funkcji:</p>
<pre class="brush: php">if ($GG-&gt;connect('123456789','hasłobota')) {
   $GG-&gt;sendMessage('300500800',"Treść &lt;b&gt;wiadomości&lt;/b&gt;...");
   $GG-&gt;disconnect();
}</pre>
<p>Funkcja ta to <em>sendMessage()</em> i przyjmuje dwa argumenty, numer odbiorcy oraz treść wysyłanej wiadomości. Jak widać w przykładzie wiadomość może zawierać tagi HTML. Dopuszczone są pogrubienia &lt;b&gt;, pochylenia &lt;i&gt;, podkreślenia &lt;u&gt; oraz złamanie linii za pomocą &lt;br&gt; lub \r\n. Funkcja po próbie wysłania wiadomość zwraca true lub false w zależności czy wszystko się udało. Można to wykorzystać do sprawdzenia powodzenia wysłania komunikatu i ewentualnie wyświetlić błąd przy użyciu <em>getError()</em>.</p>
<pre class="brush: php">if (!$GG-&gt;sendMessage($numer,$tresc)) {
   die($GG-&gt;getError());
}</pre>
<h1>Odbieranie wiadomości</h1>
<p>Używana przez nas klasa zezwala również na odbieranie wiadomości. Robi się to za pomocą dwóch funkcji:  <em>getMessages()</em> i <em>getMessageOne()</em>. Najpierw omówimy tą pierwszą gdyż jest bardziej uniwersalna.</p>
<pre class="brush: php">require_once('rfGG.class.php');
$GG = new rfGG(rfGG::VER_77);
if ($GG-&gt;connect('222333444','password')) {
   $GG-&gt;ping();
   $message = $GG-&gt;getMessages();
   for($i=0;$i&lt;count($message);$i++){
      echo $message[$i]['sender'].'&gt;'.$message[$i]['msg_text'].'&lt;br&gt;';
   }
   $GG-&gt;disconnect('Code is poetry');
}</pre>
<p>Jak widać w powyższym kodzie przez przetworzeniem wiadomości wywołaliśmy funkcję <em>ping()</em> która ma za zadanie nawiązać kontakt z serwerem i pobrać czekające na nas dane. Należy tej funkcji używać zawsze przed funkcjami do wyświetlania wiadomości. Później możemy z otrzymaną tablicą wiadomości zrobić co chcemy. W tym przykładzie wyświetlamy numer z którego otrzymano informację oraz jej treść. Zwracana tablica ma zawsze ten sam schemat. Pierwszy jej wymiar to liczba porządkowa kolejnych wiadomości a drugi to elementy o indeksach sender (numer nadawcy), time (czas w formacie timestamp), msg_text (treść) i 2 inne, nie istotne dla nas.</p>
<p>Funkcja <em>getMessageOne()</em> działa podobnie tylko, że zwraca jedną wiadomość. Trzeba więc ją wykonywać wielokrotnie. Zwraca ona tablicę jednowymiarową z elementami o indeksach takich samych jak drugi wymiar poprzedniej funkcji.</p>
<h1>Pewne zasady</h1>
<p>Na koniec chciałbym zacytować fragment licencji z pliku używanej przez nas klasy:</p>
<ul>
<li><em>4. Kategorycznie zabrania sie wykorzystywania kodu do rozsylania SPAMU oraz niechcianych wiadomosci.</em></li>
<li><em>5. Odbiorca wiadomosci musi wyrazic wczesniej zgode na ich otrzymywanie.</em></li>
<li><em>6. Zabrania sie wykorzystywania kodu do celow niezgodnych z prawem POLSKIM.</em></li>
<li><em>7. Na uzasadniona prosbe serwisu Gadu-Gadu nalezy usunac lub wylaczyc działanie kodu.</em></li>
</ul>
<p>I ja również podpisuje się pod tym ponieważ nikt z nas przecież nie chce otrzymywać spamu na komunikator, prawda?</p>
]]></content:encoded>
			<wfw:commentRss>http://mgdevelop.pl/index.php/2010/07/obsluga-protokolu-gg-w-php/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Gravatar &#8211; avatary na zamówienie</title>
		<link>http://mgdevelop.pl/index.php/2010/06/gravatar-avatary-na-zamowienie/</link>
		<comments>http://mgdevelop.pl/index.php/2010/06/gravatar-avatary-na-zamowienie/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 21:35:13 +0000</pubDate>
		<dc:creator>Elektryk</dc:creator>
				<category><![CDATA[PHP & MySQL]]></category>

		<guid isPermaLink="false">http://mgdevelop.pl/?p=210</guid>
		<description><![CDATA[W jaki sposób przechowywać  avatary to dylemat nad którym musi zastanowić się każdy webdeveloper. Czy stworzyć rejestrację użytkowników i przechowywać... <a href="http://mgdevelop.pl/index.php/2010/06/gravatar-avatary-na-zamowienie/">Czytaj dalej&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>W jaki sposób przechowywać  avatary to dylemat nad którym musi zastanowić się każdy webdeveloper. Czy stworzyć rejestrację użytkowników i przechowywać je u siebie czy może zrezygnować z nich całkowicie. A może jeszcze inaczej? Ja w tym poradniku chciałbym pokazać ciekawą alternatywę która ułatwia życie twórcom witryn internetowych i odciąża ich miejsce na serwerze. Mowa tu o Gravatarach.<span id="more-210"></span></p>
<p>Grupa Automattic to to twórcy systemu WordPress. Wraz z rozrostem ich platformy blogowej pojawiła się potrzeba obsługi avatarów, małych obrazków które pozwalają na wizualną identyfikacje komentujących. WordPress nigdy jednak nie słynął z rozbudowanego systemu użytkowników. Dlatego postanowiono przenieść ten moduł na nowo powstałą platformę Gravatar.com skąd avatary mogą być pobieranie przez wszystkie instalacje WP. Co ważne dostęp do tej bazy obrazków mają nie tylko WordPressy ale każda inna strona internetowa. Co więcej implementacja tej usługi jest bardzo prosta a cały system jest przyjazny użytkownikom.</p>
<h1>Tworzenie gravataru</h1>
<p>Serwis Gravatar jest intuicyjny w obsłudze. Po rejestracji (lub zalogowaniu się danymi z wordpress.com) możemy załadować na jego serwer swój avatar i przypisać go do swojego adresu konta pocztowego. Na ten adres dostaniemy po chwili e-mail z linkiem. Klikając na niego potwierdzimy, że jesteśmy posiadaczami tego loginu. Od tej chwili nasz avatar będzie chodził po internecie za nami. Wystarczamy, że pisząc komentarz podamy ten sam adres e-mail a nasz avatar pojawi się obok naszej opinii. Oczywiście tylko na serwisach korzystających z bazy gravatarów.</p>
<h1>Od strony webdevelopera</h1>
<p>Usługa oferowana przez serwis Gravatar niesamowicie upraszcza życie twórcom witryn internetowych. By mieć w komentarzach avatary nie musimy już tworzyć systemu rejestracji i ładowania grafik. Wystarczy pobrać od użytkownika jego e-mail i zapisać go w bazie danych. Odpowiedni, krótki skrypt dodany do kodu wyświetlającego komentarze załatwi resztę sprawy.</p>
<h1>Kod czyli zapraszamy avatary do siebie</h1>
<p>Gravatary można zaimplementować do kodu w każdym języku skryptowym. Ja pokaże jak zrobić to na przykładzie PHP ale równie dobrze można to zrobić w Pythonie, Ruby, JavaScripcie czy C#.</p>
<p>Cały proces polega na tym by skleić odpowiedni adres do obrazka tak by zawierał e-mail internaty oraz ustawienia. Adres trzeba zakodować za pomocą funkcji <em>md5()</em> aby nie był widoczny w kodzie dla botów spamerów. Najprostzy kod wygląda tak:</p>
<pre class="brush:php">&lt;?php
   $email = md5(strtolower("adres@emailowy.usera"));
   $gravatar = "http://www.gravatar.com/avatar/".$email
?&gt;
&lt;img src="&lt;?php echo $gravatar; ?&gt;" alt="Avatar"&gt;</pre>
<p>W powyższym kodzie dodatkowo przepuściliśmy adres przez funkcję <em>strtolower()</em> by mieć pewność, że wszystkie znaki są z małej litery. Proponuję się przyjrzeć jak wygląd ma adres obrazka. W chwili obecnej nasza grafika nie ma rozszerzenia, kończy się hashem. Ale w usłudze gravatar nie ma problemu z rozszerzeniem, można je spokojnie dodać. Wygląda to wtedy bardziej elegancko a w niektórych skryptach rozszerzenie jest wymagane.</p>
<pre class="brush:php">$gravatar = "http://www.gravatar.com/avatar/".$email.".jpg"</pre>
<h1>Dostosowywanie wyglądu</h1>
<p>Powyższy kod zalinkuje do obrazków o rozmiarze 80 na 80 pikseli. Gdybyśmy potrzebowali innych wymiarów to możemy w łatwy sposób to ustawić.</p>
<pre class="brush:php">&lt;?php
   $email = md5(strtolower("adres@emailowy.usera"));
   $gravatar = "http://www.gravatar.com/avatar/".$email."?size=120";
?&gt;
&lt;img src="&lt;?php echo $gravatar; ?&gt;" alt="Avatar"&gt;</pre>
<p>W tym przykładzie ustawliśmy rozmiar grafik na 120x120px. A co jeśli komentujący nie ustawił sobie gravataru? Wtedy możemy ustawić domyślny obrazek:</p>
<pre class="brush:php">&lt;?php
   $email = md5(strtolower("adres@emailowy.usera"));
   $domyslne = "http://www.moja-strona.pl/avatar.jpg";
   $gravatar = "http://www.gravatar.com/avatar/".$email."?&amp;default=".$domyslne;
?&gt;
&lt;img src="&lt;?php echo $gravatar; ?&gt;" alt="Avatar"&gt;</pre>
<p>Od teraz przy każdym użytkowniku który nie ma ustawionego gravatara będzie pojawiał się obrazek spod adresu<em> http://www.moja-strona.pl/avatar.jpg</em>. Może to spowodować jednak małe zamieszanie dlatego Gravatar.com pozwala by domyślnie był wyświetlany obrazek generowany na podstawie literek w adresie e-maila. Brzmi to dziwnie ale naprawdę działa i co więcej jest dostępne w trzech opcjach. Aby uaktywnić tą funkcję zamiast adresu podajemy <em>identicon</em>, <em>monsterid</em> lub <em>wavatar.</em></p>
<pre class="brush:php">$gravatar = "http://www.gravatar.com/avatar/".$email."?&amp;default=wavatar";</pre>
<p>Ale to jeszcze nie wszystko. Gravatar obsługuje klasyfikacje obrazków dzięki czemu możemy zapobiec by na naszej stronie nie pojawiały się zbyt frywolne grafiki. Domyślna klasyfikacja to G czyli obrazki dla wszystkich, PG to obrazki mogące zawierać niestosowne gesty lub lekką przemoc, R należy kojarzyć z narkotykami, nagością i profanacją a X to&#8230;hulaj dusza, piekła niema. W kodzie konfiguruje się to następująco:</p>
<pre class="brush:php">$gravatar = "http://www.gravatar.com/avatar/".$email."?&amp;rating=x";</pre>
<p>Oczywiście wszystkie powyższe opcje można dowolnie łączyć, o to przykład takiego połączenia:</p>
<pre class="brush:php">&lt;?php
   $email = md5(strtolower("adres@emailowy.usera"));
   $gravatar = "http://www.gravatar.com/avatar/".$email."?&amp;rating=x&amp;default=monsterid&amp;size=50";
?&gt;
&lt;img src="&lt;?php echo $gravatar; ?&gt;" alt="Avatar"&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://mgdevelop.pl/index.php/2010/06/gravatar-avatary-na-zamowienie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

