Jakiś czas temu chciałem pobawić się Blip!em za pomocą Pythona. Ot, mam w planach zrobienie sobie coś a’la Sekretarka (która oddaje nieocenione usługi – dzięki ^TomaszTopa :) ), tyle żeby wysyłał codziennie lisię prywatnych i kierowanych do mnie statusów na maila. Prosta dość sprawa, trzeba tylko do tego zasiąść ;) Ale nadszedł ten dzień, i się zmusiłem. Jako, że wiedziałem że do Blip!a istnieją aż dwie biblioteki napisane w Pythonie (lista różnych aplikacji znajduje się na Blip!owym wiki), to po prostu uznałem że skorzystam z którejś z nich… Ech, za dobrze by było. Żadna z nich nie jest na tyle kompletnym rozwiązaniem, żeby jej w normalnych warunkach użyć. Oczywiście nie mam pretensji do ich autorów – stworzyli narzędzie którego potrzebowali, i podzielili się nim ze światem, czyli jest OK :)

Jednak to spowodowało na razie zarzucenie moich planów o Pythonowej Emailowej Sekretarce ™ ;) Owszem, również mógłbym napisać w sumie dwa polecenie do pobierania statusów kierowanych i prywatnych (directed_messages i private_messages) ale ja lubię kompleksowe rozwiązania – tak samo jak dla WP-Blip!a napisałem BlipApi.php :)

Jest w tej chwili jeden drobny błąd (zauważony przez ^mrkjego blog, dzięki :) ) związany z tym, że podczas testowania siedziałem w folderze gdzie są wszystkie pliki bilbioteki, i tak jakoś było łatwiej… no i w tej chwili nie działa to poprawnie jako osobny moduł Pythona tylko jak luźne pliki które gdzieś w PYTHONPATH trzeba umieścić ;) Błąd ten, jako że zaczynam dochodzić do się, niedługo postaram się naprawić oczywiście, być może zgłoszę też bibliotekę do Python Package Index. A na razie zapraszam do pobierania: blipapi.googlecode.com, używania i zgłaszania problemów i/lub nowych featur :)


Mały bugfix release (zgłoszony przez WPNinja): W przypadku gdy nie można zapisać pliku z cache do katalogu ustawionego jako zmienna $wp_blip_cacheroot, próbuje zapisać do systemowego katalogu tymczasowego (o ile się uda takowy znaleźć). Gdy także i ta operacja się nie powiedzie, zostanie rzucony E_USER_NOTICE z informacją o problemie, a wtyczka po prostu nie będzie korzystała z funkcji cacheowania wpisów.

Do pobrania z GoogleCode. Jak zawsze proszę o informacje i uwagi nt działania wtyczki, a także ucieszyłbym się z informacji że ktoś gdzieś moich wypocin używa :)


Kolejna odsłona WP-Blip!a :) Tym razem jeden bugfix (no, powiedzmy że fix), i jedna zmiana:

  • możliwość formatowania daty dodania statusu (via komentarz Julka)
  • naprawione linkowanie tagów i userów – teraz łapie poprawnie polskie znaczki. Może nie do końca poprawnie działać jeśli kodowanie znaków jest inne niż UTF-8, proszę wtedy dać znać, mam wrażenie że coś źle przemyślałem ;)

Standardowo proszę o komentarze pod tym wpisem, lub na email :) A nowa wersja pluginu jest do pobrania na Google Code.

UPDATE:

Już nowa wersja – 0.3.1 ;)

  • fix: pliterki w tagach teraz działają lepiej
  • fix: myślnik w tagach też działa lepiej
  • add: linki we wpisach są obejmowana tagiem <a />

Do pobrania tradycyjnie na GoogleCode.


Nowa wersja plugina do WordPressa pokazującego statusy z Blip!a. Zmiany:

  • update BlipApi.php do nowej wersji
  • linkowanie tagów i użytkowników
  • dodanie pliku README z podstawową dokumentacją

Zainteresowanych zapraszam ściągania i aktualizowania :)


Kilka dni temu Tomasz Tybulewicz (http://tybulewicz.com/) podesłał mi wersję BlipApi.php z dodaną obsługą operacji na obrazkach, jakie zaczęło oferować Blip!owe API :) Tomek równocześnie dołączył do “zespołu” tworzącego i rozwijającego BlipApi, które obecnie jest tylko w wersji PHP, a docelowo, o ile czas pozwoli, pojawi się w jeszcze kilku językach. Nie będę na razie mówił w jakich, bo to dość niepewna przyszłość ;)

Nową wersję można pobrać ze specjalnie utworzonego w tym celu projektu na Google Code: blipapi.googlecode.com (jeśli ktoś kojarzy projekt blipapi-php na Google Code, to niech wymaże go ze swoich bookmarków, został usunięty).


Jestem na fali: w ciągu całej przerwy świątecznej (dla mnie to okres od 22.12.2007 do 2.01.2008 włącznie) wklepałem całe mnóstwo (kilka tysięcy) linii kodu. Trochę firmowych, trochę prywatnych (nie publikowanych), a trochę (jak te związane z Blip!em) publicznych. Właśnie skończyłem upublicznianie pluginu do WordPressa do wyświetlania ostatnich statusów z Blip!a.

Jakaś dokumentacja pojawi się niedługo na stronie projektu (repo.urzenia.net/PHP:WP_Blip!wp-blip.googlecode.com), w tej chwili sam plugin można pobrać ze strony na Google Code (code.google.com/p/wp-blip).

Krótka instrukcja obsługi:

  • pobrać plik z Google Code, rozpakować go w katalogu
    WORDPRESS_ROOT/wp-content/plugins (zostanie utworzony katalog
    wp-blip)
  • w panelu administracyjnym Wordpressa uaktywnić plugin
  • w Options->WP Blip! ustawić login i hasło do swojego konta w Blip!ie (także kilka innych opcji)
  • gdzieś w szablonie dodać wywołanie funkcji:
    <?php
    if (function_exists ('wp_blip')) { wp_blip("\n", 1); }
    ?>
  • Wszelkie uwagi mile widziane :) Można je zostawić w komentarzach do tego wpisu, lub dowolną inną metodą (kilka metod kontaktu ze mną opisanych jest na podstronie urzenia.net/kontakt).


Twórcy Blip!a wydali wersję 0.02 API, więc zrobiłem co w mojej mocy aby skończyć moją PeHaPową bilbiotekę do tegoż ;) Zmian dużo, do wersji API 0.01 była ona mocno testowa, i w sumie nie jest poprawnie zrobiona, są w niej błędy etc, których nie zamierzam już poprawiać. Wersja 0.02.4 niesie z sobą pełną obsługę protokołu, wykorzystując wszystko co producenci dali, szczegóły w oficjalnej dokumentacji Blip!a.

Szczegóły numeracji biblioteki: pierwszą część stanowi wersja API (w tym wyapdku 0.02), drugą – odsłona samej biblioteki (w tym wypadku 4).

BlipApi.php można używać na dwa sposoby:

  1. wywołując metodę BlipApi::execute(), gdzie pierwszym parametrem jest nazwa komendy do wykonania (spis komend w oficjalnej dokumentacji, jedyną różnicą jest dirmsg zamiast directed_messages), a następnie dostępne parametry metody (szczegóły w pliku klasy i w oficjalnej dokumentacji Blip!a), np.:

    $bapi = new BlipApi ('login', 'haslo');
    $bapi->connect ();
    $bapi->execute ('update_read', null, 'mysz');

    Pobierze ostatnie 10 statusów użytkownika mysz.

  2. wywołując komendę jako konkretną metodą obiektu BlipApi:

    $bapi->update_read (null, 'mysz');

    Powyższe dwa wywołania są sobie równoważne.

Jeśli ktoś znajdzie jakieś błędy, lub ma uwagi co do samej biblioteki, proszę o komentarze tutaj, lub kontakt mailowy: urzenia.net/email. Z góry dziękuję za feedback ;)

Bibliotekę można pobrać/obejrzeć z: repo.urzenia.net/files/blipapi-0.02.phps. W tej chwili nie ma skąd pobrać samej biblioteki, jako że usunąłem repo.urzenia.net. Dołączona jest za to do pakietu WP Blip!, skąd można ją “ręcznie” wyciągnąć :) Przepraszam za kłopot :)


Od kilku tygodni bawię się po trochu CURLem, w ramach tworzenia PeHaPowej biblioteki do Blip!a. Poniżej kilka zagwozdek, na które ciężko znaleźć sensowną odpowiedź w google, albo ja nie wiem jak pytać…

  1. Jak poprawnie wykonać zapytanie PUT? (aka: metoda PUT i “select/poll returned error”)

    Nad tym spędziłem najwięcej czasu. Kombinowałem na mnóstwo sposobów. Kluczem do sukcesu okazało się podejrzenie wersji konsolowej CURLa z dokładnie takim samym zapytaniem, jakie wysyłałem za pomocą skryptu PHP. W skrócie: należy wymusić na CURLu HTTP 1.0, za pomocą ustawienia opcji:

    curl_setopt ($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); # gdzie $ch jest obiektem utworzonym za pomocą curl_init ()

    Po tej operacji zapytania śmigają jak należy (dodam tylko, że czasem zamiast “select/poll returned error” dostawałem “connection reset by peer”).

  2. Przy rozwiązywaniu powyższego problemu, pomogła mi mała sztuczka. Mianowicie musiałem podejrzeć jakie nagłówki wysyła CURL. Normalnie PHPowy CURL nie zamierza pokazać co jest wysyłane i odbierane (Rozpisałem się – oczywiście nagłówki odbierane bez problemu można zobaczyć. Dzięki, Arek ;) ), bo i po co… Ja posłużyłem się tutaj specjalnie na tą okazję utworzonym skryptem PHP z dokładnie wyizolowanym ‘testcase’. Tutaj, po zaimplementowaniu opcji:

    curl_setopt ($ch, CURLOPT_VERBOSE, 1);

    i odpaleniu skryptu z konsoli, grzecznie została mi pokazana komunikacja wychodząca z serwerem, co było kluczem do rozwiązania problemu (okazało się że był wysyłany dodatkowy nagłówek Expect należący do HTTP 1.1, a po wrzuceniu tego w google znalazłem informacje które mnie nakierowały na właściwy trop).

  3. Jak wysłać plik POSTem?

    Ech, w sumie rozwiązanie jest banalne, jeśli ktoś dokładniej przeczyta manual na stronach PHP dotyczący CURLa. Ale skoro już opisuję zagwozdki…

    PHPowy CURL pozwala wysyłać dane na dwa sposoby (akceptowane i sprecyzowane, oczywiście, w odpowiednim RFC). Jeden to x-www-form-urlencoded (tak są wysyłane dane za pomocą webowych formularzy), drugi to multi-part form-data (tak są wysyłane pliki, także z formularzy). Normalnie dla opcji CURLOPT_POSTFIELDS podaje się string który wygląda dokładnie tak samo jak ten widoczny w URLach skryptów pehapowych (mówiąc po laicku), np. a=1&b=2 – wtedy dane są wysyłane metodą x-www-form-urlencoded. Aby zmusić CURLa do wysłania danych metodą multi-part form-data, jako parametr opcji CURLOPT_POSTFIELDS musimy podać tablicę. Tak, właśnie tablicę, gdzie kluczem powinne być nazwa pola (odpowiadająca temu z prawdziwego formularza), a wartością ścieżka do pliku, ale uwaga: ścieżka powinna być poprzedzona znakiem “małpy”: @. Czyli powinno wyglądać to tak:

    curl_setopt ($ch, CURLOPT_POSTFIELDS, array ('pole' => '@/sciezka/do/pliku.jpg'));

    Po tej operacji wysłanie pliku nie powinno być już problemem :)


Strona 1 z 2