Wer vor dem Problem steht, dass ein Kunde bei einer Web-Anwendung unbedingt Tabellen-Zeilen mit wechselnden Farben je gerader und ungerader Zeile wünscht und dafür ca. 200 Kilobyte Quellcode überarbeiten müsste, der kann es sich ein wenig vereinfachen, wenn folgender Code vor der Ausgabe auf den auszugebenden Inhalt angewendet wird. Weiterlesen…
php
Per RegEx geraden und ungeraden Tabellen-Zeilen ensprechende CSS-Klassen zuweisen
Spaß mit der Twitter API und Ausdruck des Protests gegenüber Harley Davidson
@moto1203 hat mich über Twitter kontaktiert und gefragt, ob es nicht irgendwie möglich sei ein Programm zu schreiben, dass bei bestimmten Hashtags eine @reply erzeugt. Thematisch ging’s konkret um den bekannten Motorradhersteller “Harley Davidson”, der kürzlich die Tochter- und Traditionsfirma “BUELL” einfach so dicht gemacht hat. Buell Motorräder wurden “nicht oft genug” verkauft, was aber nichts daran ändert, das die Kisten ihren Markt hatten. Das fanden wir jedenfalls schon ziemlich kacke von Harley Davidson.
Also habe ich kurzerhand einen neuen Twitter-Account mit dem klangvollen Namen “@subversives” erstellt und ein kleines PHP-Skript geschrieben, dass neue Tweets mit einem #harley Hashtag sucht und eine zufällig ausgewählte Antwort erstellt. Natürlich konfigurierbar. :-) Weiterlesen…
SOAP Dienste programmieren mit PHP
Wer für seine eigene Anwendung eine Web-API anbieten möchte, hat vielfältige Möglichkeiten dies zu realisieren. Per einfachem HTTP GET oder POST Request und einer Rückgabe als XML/RSS/CSV/JSON/whatever, oder – was ich etwas eleganter finde – per SOAP. Dabei ist das Entwickeln eines eigenen SOAP Dienstes mit PHP gar nicht so kompliziert, wie vielleicht vermutet. Zumindest finde ich SOAP schöner als die weitere Alternative XML-RPC. Weiterlesen…
SVN per PHP bedienen
Da ich ja einige WordPress Plugins entwickele und ich mir die Zusammenarbeit mit dem WP SVN Server erleichtern wollte, habe ich für alle Plugins ein kleines PHP Script geschrieben, welche die Änderungen im SVN eincheckt. Klar ginge das auch über ein Shell-Script, aber die PHP Datei kann ich nicht nur auf der Konsole, sondern auch über den Browser aufrufen – manchmal ganz praktisch.
Wenn ich an einem Plugin also nur kleine Änderungen gemacht habe, die ich eben schnell ins Repository schubsen will, dann kopiere ich die geänderten Dateien einfach in den trunk, erhöhe die Version im SVN Script und rufe dieses anschließend auf. Die neue Version wird dann eingecheckt und der neue tag erstellt.
<?php
// Config
$plugin_src = '/home/www/example/src/article2pdf/';
$svn_home = '/home/www/example/src/article2pdf/svn/article2pdf/';
$svn_trunk = '/home/www/example/src/article2pdf/svn/article2pdf/trunk/';
$svn_tags = '/home/www/example/src/article2pdf/svn/article2pdf/tags/';
$svn_user = 'the_user';
$svn_passwd = 'the_password';
// Version values
$version = '0.27';
$message = 'Adding some new functions.';
// Set home for svn, important, or svn will not work!
putenv( "HOME=$svn_home" );
// Up
echo passthru( "cd $svn_home ; svn up", $ret );
if( $ret === 0 )
{
// Stat
echo passthru( "cd $svn_home ; svn stat", $ret );
if( $ret === 0 )
{
// Check in trunk
echo passthru( "cd $svn_home ; svn ci --username $svn_user --password $svn_passwd -m '$message'", $ret );
if( $ret === 0 )
{
// Copy new version to tag
echo passthru( "cd $svn_home ; svn cp trunk tags/$version", $ret );
if( $ret === 0 )
{
// Stat and check in new version
echo passthru( "cd $svn_home ; svn stat", $ret );
echo passthru( "cd $svn_home ; svn ci --username $svn_user --password $svn_passwd -m 'Tagging $version'", $ret );
}
}
}
}
?>
Wichtig ist per putenv das HOME-Verzeichnis auf den Pfad zum SVN Verzeichnis zu setzen, da SVN über PHP sonst nicht funktioniert. SVN braucht zwingend im Environment eine passende HOME-Angabe. Diese Umgebungsvariable scheint aber standardmäßig von PHP nicht gesetzt zu sein.
Spielerei mit der Twitter API
Kürzlich habe ich ein wenig mit der Twitter API gespielt. Ich wollte mal sehen, welche Follower meiner Follower auch mir folgen. Dazu habe ich mir eine kleine Funktion geschrieben die ermittelt, welche anderen Twitterer von einem Account verfolgt werden. Die Ergebnisse habe ich in einer Datenbank-Tabelle gespeichert und später ausgewertet.
Die Funktion ist zwar nicht perfekt, mir reichte sie jedoch.
<?php
function get_friends( $screen_name, $page_limit = 200 )
{
$screen_names = array();
for( $page = 1; $page < $page_limit; $page++ )
{
ob_start();
$friends_json = file_get_contents( 'http://twitter.com/statuses/friends.json?screen_name=' . $screen_name . '&page=' . $page );
$errors = ob_get_contents();
ob_end_clean();
if( $friends_json !== false )
{
$friends = json_decode( $friends_json );
if( is_array( $friends ) && count( $friends ) )
{
foreach( $friends AS $friend )
$screen_names[ $friend -> id ] = $friend -> screen_name;
}
else
if( !count( $friends ) )
{
break;
}
else
{
$screen_names = array();
break;
}
}
else break;
}
if( count( $screen_names ) || $errors == '' )
{
return $screen_names;
}
else
{
if( strpos( $errors, '401 Unauthorized' ) !== false )
return false;
else
return null;
}
}
// Example usage
print_r( get_friends( 'motorradblogger' ) );
?>
Schade übrigens, dass die Anzahl der Requests pro Stunde bei Twitter limitiert ist, sonst ließen sich ziemlich schnell, ziemlich viele Twitter-Accounts crawlen. ;-)
Die Benutzung ist sehr simpel: Einfach den Accountnamen übergeben, die Funktion läd Seitenweise alle Accounts, denen gefolgt wird und gibt diese in einem assoziativen Array (Schlüssel: Account-ID, Wert: Accountname) zurück. Im Falle eines Fehlers wird ‘false’ zurückgegeben, bei einem unbekannten Fehler ‘null’.
