My Digital Lifestyle

Einträge in der Kategorie Development

Flickr… Und das Problem des Uploads

1 TB Speicher für Bilder und kurze Videos sowie ein neues Design… Damit möchte “das neue Flickr” glänzen. Persönlich finde ich die Umsetzung richtig gut gelungen. Ich konnte vorher dem alten und konservativen Flickr nichts abgewinnen. Aber ein Wermutstrofpen bleibt: Der Upload.

Weiterhin bietet Flickr dem Benutzer keine komfortable Möglichkeit, Massen von Bildern elegant, automatisiert und in einer vorgegebenen Struktur hoch zu laden. Eine massentaugliche Lösung mußte nun her… Also habe ich mir die Flickr API angeschaut und ein eigenes Perl-Script entwickelt. Dieses kann dazu genutzt werden, ganze Verzeichnisse zu Flickr zu schieben. Mehr Details zu meinem “pushFolderToFlickr.pl” Projekt gibt es bei GitHub, wo man das Script auch downloaden kann.

Hinweise:

  • Vor der ersten Benutzung muß mit dem Script “getFlickrAuthToken.pl” ein API-Key erzeugt werden.
  • Die von dem Script ausgegebenen Daten werden nun im Hauptscript eingetragen.

Syntax des Scripts:

./pushFolderToFlickr.pl <verzeichnis> -q

Der Parameter “-q” kann genutzt werden, um nur minimale Ausgaben zu erzeugen. Das ist besonders bei automatisierten Jobs sehr zu empfehlen.

Wie folgt könnte der Befehl für das Uploaden einer ganzen Reihe von Verzeichnissen aussehen:

find /home/user/Bilder/* -type d -exec ./pushFolderToFlickr.pl {} -q \; >upload.log 2>upload.log

Es werden alle Verzeichnisse unter “/home/user/Bilder/” hochgeladen, wobei die Ausgaben des Scripts in die Logdatei “upload.log” umgelenkt werden. Eventuell aufgetretene Fehler beim Upload können dort erkannt und nachgelesen werden.

flattr this!

Private Playlists – Die YouTube API und PHP (Zend)

Wer die API von YouTube mit dem PHP Zend Framework anspricht, wird irgendwann merken, dass das Anlegen von privaten Playlists nicht ohne Weiteres möglich ist. Entsprechende Methoden, wie bei Videos, fehlen im Framework.

Mit folgender Funktion kann einem PlaylistEntry das Privacy-Flag konfiguriert werden.

function setYtPlaylistToPrivate($playlistListEntry)
{
   $extensionElements = $playlistListEntry->getExtensionElements();
   $extension = new Zend_Gdata_App_Extension_Element('yt:private', 'yt',
      'http://gdata.youtube.com/schemas/2007', '');
   array_push($extensionElements, $extension);
   $playlistListEntry->setExtensionElements($extensionElements);
   $playlistListEntry->save();
}

flattr this!

PHP-Script für den SMS-Versand via Sipgate API

Sipgate stellt eine hervorragend dokumentierte und via XML-RPC ansprechbare API zur Verfügung. Folgende PHP-Funktion nutzt diese Schnittstelle für den Versand einer SMS über diese Schnittstelle.

<?php 
include ('xmlrpc/lib/xmlrpc.inc'); 

function sipgate_sendsms($smsnumber, $smstext) 
{ 
    // Festlegen der Konfigurationswerte. 
    define ('SIPGATE_SERVER',  'samurai.sipgate.net'); 
    define ('SIPGATE_PATH',  '/RPC2'); 
    define ('SIPGATE_PROT',  'https'); 
    define ('SIPGATE_PORT',  '443'); 
    define ('SIPGATE_SIPURI_PREFIX',  'sip:'); 
    define ('SIPGATE_SIPURI_HOST',  '@sipgate.net'); 

    define ('SIPGATE_USER',  'WEB-LOGIN VON SIPGATE'); 
    define ('SIPGATE_PASS',  'WEB-PASSWORT VON SIPGATE'); 

    // Erstellen des xmlrpc clients. 
    $xmlurl = SIPGATE_PROT . "://" . SIPGATE_USER . ":" . SIPGATE_PASS . "@" . 
        SIPGATE_SERVER . ":" . SIPGATE_PORT . SIPGATE_PATH; 

    $xmlclient = new xmlrpc_client($xmlurl); 
    $xmlclient->setSSLVerifyPeer(FALSE); 

    // Rufnummer und Text für die SMS vorbereiten. 
    $smsnumber = SIPGATE_SIPURI_PREFIX . $smsnumber . SIPGATE_SIPURI_HOST; 
    $smstext = substr($smstext, 0, 160); 

    $val_a["RemoteUri"] = new xmlrpcval($smsnumber); 
    $val_a["TOS"] = new xmlrpcval("text"); 
    $val_a["Content"] = new xmlrpcval($smstext); 
    //$val_a["Schedule"] = new xmlrpcval(iso8601_encode(NULL), "dateTime.iso8601"); 

    $val_s = new xmlrpcval(); 
    $val_s->addStruct($val_a); 
    $v = array(); 
    $v[] = $val_s; 

    // Nachrichtenobjet erstellen. 
    $m = new xmlrpcmsg('samurai.SessionInitiate', $v); 

    // SMS senden. 
    $r = $xmlclient->send($m); 

    // Anzeigen von eventuellen Fehlern. 
    if ( $r->faultCode() ) 
    { 
        return false; 
    } else 
    { 
        return true; 
    } 
} 
?>

Dieses Script nutzt die Möglichkeiten der XML-RPC Bibliothek. Diese ist nicht zu verwechseln mit der bereits integrierten xmlrpc-Library von PHP.

Hinweise:

  • Im Script muss noch der Benutzername und das Passwort des Sipgate Webinterface Zugangs konfiguriert werden.
  • Die Installation bzw. das Entpacken der XML-RPC Bibliothek muss im gleichen Verzeichnis erfolgen in dem sich auch das Script befindet. Ansonsten muß der Include-Pfad angepasst werden.
  • Syntax der Funktion:
    sipgate_sendsms("49421123456789", "Hallo Welt.");

    Wichtig ist, dass der internationale Wählcode vorangestellt wird. Ohne die doppelte 0 und ohne ein + Zeichen.

flattr this!

Picasa-Webalben – Ein kompletter Reset – Tabula rasa

Google hat im Webfront von Picasa nicht vorgesehen, mehrere Alben auf einmal zu löschen. Das ist genau dann besonders ärgerlich, wenn sich sehr viele Alben im Bestand befinden. Besteht der Wunsch komplett “von vorne” zu beginnen, gestaltet sich das Löschen also sehr schwierig und nervig.

Ich war an diesem Punkt angekommen und habe mir folgendes PHP-Script gestrickt.

Wichtig: Es werrden wirklich ALLE ALBEN aus dem angegebenen Picasa-Account gelöscht.

<?php
$clientLibraryPath = '/path/to/ZendGdata/library';

$login    = "login";
$password = "password";

// Init GData and Zend-Framework.
set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_Photos');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

try
{
   $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
   $client = Zend_Gdata_ClientLogin::getHttpClient($login, $password, $service);
   $gp = new Zend_Gdata_Photos($client, "Picasa DELETEALL PHP-Script");
} catch (Exception $e)
{
   echo "ERROR: ". $e->getMessage() ."n";
   exit;
}

try
{
   $userFeed = $gp->getUserFeed("default");
   foreach ($userFeed as $userEntry)
   {
      echo "Deleting: ". $userEntry->title->text ."n";
      $userEntry->delete();
   }
} catch (Zend_Gdata_App_HttpException $e)
{
    echo "ERROR: ". $e->getMessage() ."n";
    exit;
} catch (Zend_Gdata_App_Exception $e)
{
    echo "ERROR: ". $e->getMessage() ."n";
    exit;
}
?>

Hinweis: Das Script benötigt das Zend GData Framework, welches hier heruntergeladen werden kann. Zusätzlich muß im Script in der ersten Zeile noch der Pfad zum library Verzeichnis des Frameworks angepasst werden.

flattr this!