Powiadomienie o zdarzeniu polubienia wpisu na Facebooku
- Kategoria: Webmastering, Tagi: PHP, Facebook, JavaScript, jQuery, Ajax
- Napisane przez: Jerzy Piechowiak
- Liczba odsłon: 1116
W ubiegłym tygodniu, postanowiłem iść z duchem czasu i jeszcze bardziej zintegrować moją stronę z Facebookiem. W tym celu, przy wykorzystaniu XFBML (czyli Facebookowe API), dodałem możliwość polubienia samej strony jak i konkretnych wpisów z poziomu bloga. O tym ilu użytkowników polubiło blog, łatwo się dowiedzieć bezpośrednio z poziomu fanpage'a. Niestety nie mamy takich informacji, na temat liczby polubień
, każdej z podstron. Możemy co prawda co jakiś czas wejść każdą z nich i to sprawdzić... Ale od czego mamy Facebookowe API, PHP oraz jQuery:)
Facebook API - poznajmy się
Facebook otacza nas zewsząd. A czemu i jak to robi? A no właśnie, dzięki świetnie napisanemu, wszędobylskiemu API;) Pełną dokumentację, można znaleźć tutaj. Nas interesować będzie temat obsługi zdarzeń, a konkretnie tego, które wyzwalane jest przy akcji lubienia czegoś.
Generalnie kod obsługi zdarzeń (z ang. event), prezentuje się następująco (JavaScript):
FB.Event.subscribe('event', function(response) {
// zrób coś z odpowiedzią
});
Gdzie jako event, należy rozumieć jedno z poniższych zdarzeń:
- auth.login - zdarzenie uruchamiane przy logowaniu na FB
- auth.logout - zdarzenie uruchamiane przy wylogowywaniu z FB
- auth.prompt - zdarzenie uruchamiane gdy użytkownik musi się zalogować po naciśnięciu przycisku Like
- auth.sessionChange - zdarzenie uruchamiane przy zmianie sesji
- auth.statusChange - zdarzenie uruchamiane przy zmianie statusu
- xfbml.render - zdarzenie uruchamiane po zakończeniu funkcji FB.XFBML.parse()
- edge.create - zdarzenie uruchamiane przy polubieniu (fb:like)
- edge.remove - zdarzenie uruchamiane gdy użytkownik przestaje coś lubić (fb:like)
- comment.create - zdarzenie uruchamiane gdy użytkownik dodaje komentarz (fb:comments)
- comment.remove - zdarzenie uruchamiane gdy użytkownik usuwa komentarz (fb:comments)
- fb.log - zdarzenie logowania
Nas oczywiście najbardziej interesować będzie zdarzenie edge.create, które z pomocą jQuery, zaraz ładnie sobie obsłużymy:)
Obsługa zdarzenia za pomocą jQuery
Wiemy już jak wygląda obsługa zdarzenia za pomocą JavaScript (patrz poprzedni akapit), wiemy też, że zdarzenie zwraca zmienną response, ale nie wiedzieliśmy dotychczas, że w tej zmiennej znaleźć może się adres URL polubionego elementu. Uzbrojeni w taką wiedzę, możemy zrobić już pewien pożytek z tymi informacjami. Zaczniemy od tego, że po przechwyceniu zdarzenia, wyślemy adres URL, do kodu PHP, który już dalej się z nim rozprawi. Ponieważ zadanie ma się odbywać w tle, nie będziemy potrzebowali żadnej funkcji success, error itp. Musimy po prostu wysłać URL i tyle. Nic na samej stronie się nie zmienia. Oto konieczny kod:
FB.Event.subscribe('edge.create', function (sResponse) {
if (sResponse) {
$.ajax({
type: "POST",
url: "index.php",
data: "action=facebooklike&url=" + sResponse,
async: true
});
}
});
Kod nie mógłby by być prostszy;) Wysyłamy asynchronicznie komendę facebooklike wraz z URLem do pliku index.php (czytaj więcej na temat Ajaxa i jQuery). Resztą zajmiemy się już po stronie serwera;)
Obsługa Facebook like w PHP
Czas najwyższy na kod PHP. W kodzie PHP, musimy najpierw obsłużyć nadchodzące żądanie post. Zapewne możemy skorzystać z mniej więcej takiej konstrukcji:
<?php
//...
$sFormAction = $_POST['action'];
switch($sFormAction)
{
case 'addcomment':
$this->AddCommentCmd();
break;
//...
case 'facebooklike':
$this->FacebookLikeCmd();
break;
}
//...
?>
Jest to oczywiście pewien wycinek istniejącej klasy, dlatego należy złapać ideę. Odbieramy żądania post i zmienną action przypisujemy do zmiennej lokalnej. Następnie za pomocą instrukcji switch, sprawdzamy jaka to akcja i wykonujemy odpowiednie działanie - czytaj uruchamiamy przeznaczoną do tego zadania funkcję np. FacebookLikeCmd.
Wewnątrz funkcji, powinniśmy odebrać URL i podjąć jakieś decyzje co do niego. Przykładowa implementacja tej funkcji może wyglądać tak:
<?php
//...
private function FacebookLikeCmd()
{
$this->SendEmail('Nowy Facebook Like', 'URL '.$_POST['url'].
' otrzymał nowy like.', 'noreply@altcontroldelete.pl');
}
//...
?>
Kolejne wywołanie funkcji? Można dostać zawrotu głowy;) Wysłanie e-maila z powiadomieniem może być tylko jedną z wielu akcji jakie możemy uczynić. Możemy stosowną informację również odnotować np. w bazie danych itp. Przyjrzyjmy się jednak funkcji, która wyśle dla nas e-mail (warunkiem koniecznym jest obsługa funkcji mail na serwerze, sprawdzić możemy to przez PHP Info):
<?php
//...
private function SendEmail($sSubject, $sContent, $sFrom)
{
if('' == $sFrom)
{
$sFrom = 'noreply@altcontroldelete.pl';
}
$sTo = 'moj@mail.pl';
$sEmailMessage = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="font-size: 10pt; font-family: Arial; background-color: #FFF; color: #000;">';
$sEmailMessage .= $sContent;
$sEmailMessage .= '</body></html>';
$sHeaders = "MIME-Version: 1.0\n";
$sHeaders .= "Content-type: text/html; charset=utf-8\n";
$sHeaders .= "Content-Transfer-Encoding: 8bit\n";
$sHeaders .= "From: $sFrom\n";
return(@mail($sTo, $sSubject, $sEmailMessage, $sHeaders));
}
//...
?>
Wielkiej, magicznej sztuki to tu raczej nie ma, ale przyjrzyjmy się bliżej temu fragmentowi. Do funkcji przekazujemy temat, treść oraz adres nadawcy. Jeśli adres nadawcy jest pusty, możemy skorzystać z domyślnego. Następnie określamy adres docelowy, później sklejamy treść oraz nagłówki. Punktem finalnym, jest wywołanie funkcji mail, ze wszystkim tym co do tej pory skleiliśmy;) Można jeszcze pomyśleć o różnych zabezpieczeniach, choć w tym przypadku, nie jest to operacja, w którą ingeruje użytkownik. I to właściwie tyle co chciałem w tym wpisie przekazać;)
P.S. mam nadzieję, że po tym wpisie moja skrzynka zostanie zasypana... oczywiście informacją o nowych lubiących;)
Data ostatniej modyfikacji: 05.06.2011, 17:21.
Komentarze