Dieser Tweet ist in dieser Woche nicht verfügbar

Ich hatte vor einiger Zeit einen Status-Bot für Twitter geschrieben. Dieser Bot schaut ob eine Bedingung erfüllt ist und twittern dann einen Satz wie:

Die Tür ist offen.

Wenn die Bedingung sich wieder ändert, könnte der Bot:

Die Tür ist zu.

twittern. Allerdings gibt es da ein Problem. Twitter lässt doppelte Tweets innerhalb einer bestimmten Zeitspanne (Gerüchten zu folge – eine Woche) nicht zu. Damit muss sich der Status-Bot etwas ausdenken wenn er die gleiche Nachricht öfters verschicken möchte. Wenn man dieses Verhalten von Twitter nicht kennt, wundert sich warum der Tweet nicht abgeschickt werden kann. Die einfachste Möglichkeit ist es hier einfach einen Zähler in den Tweet einzubauen. Alternativ kann man die gleiche Nachricht natürlich in unterschiedliche sprachliche Konstrukte packen.

PHP Coding Standards Fixer

Wenn man ab und an PHP nutzt, wird man sicherlich auch schonmal etwas von PSR-1 und PSR-2 gehört haben. PSR steht dabei für PHP Specification Request. PSR-1 und PSR-2 sind dabei der Basis Coding Standard und der Coding Style Guide.

cs.sensiolabs.org

cs.sensiolabs.org

Möchte man seinen Quelltext an diese Standards anpassen, so kann man dies natürlich ohne Probleme per Hand erledigen. Allerdings ist dies je nach Menge des Quelltextes doch recht umständlich. Mit Hilfe des PHP Coding Standards Fixer kann man diese Arbeit automatisieren. Genutzt wird die Software auf der Konsole:

php php-cs-fixer.phar fix /path/to/dir

Nach dem Durchlauf wurde der Quellcode an die Gegebenheiten des Standards angepasst. Bezogen werden kann der PHP Coding Standards Fixer auf der offizielle Seite. Die Anwendung ist dabei unter der MIT-Lizenz lizenziert und damit freie Software.

MySQL Improved Extension

Wenn man früher unter PHP eine MySQL-Datenbank ansprechen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Problem an dieser API ist, das sie deprecated also veraltet ist und damit nicht mehr genutzt werden sollte:

$db = mysql_connect ($host, $user, $password) or die ("Es konnte keine Verbindung zum Datenbankserver hergestellt werden");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db ($name, $db) or die("Die Datenbank \"$name\" konnte nicht ausgewählt werden");

Stattdessen soll man die MySQL Improved Extension kurz Mysqli nutzen. Dabei handelt es sich um eine moderne objektorientierte API für den Zugriff auf MySQL in PHP. Eine einfache Abfrage mittels Mysqli sieht dabei wie folgt aus:

$mysqli = new mysqli($databaseHost, $databaseUsername, $databasePassword, $databaseName);
$sql = "SELECT * FROM token";
$result = $mysqli->query($sql);

for ($row_no=$result->num_rows-1; $row_no>=0; $row_no--) 
{
    $result->data_seek($row_no);
    $row=$result->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

Die API unterscheidet sich dabei nicht groß von der alten API, so das Umstieg hier relativ einfach fallen sollte. Auf der entsprechenden Dokumentationsseite auf php.net finden sich noch viele weitere Beispiele.

Cronjob-Ausgabe in eine Datei umleiten

Manchmal möchte die Ausgabe eines Cronjobs in eine Datei umleiten. Dazu sollte man im ersten Schritt die Crontab-Datei mittels:

crontab -e

öffnen. Die entsprechende Datei sieht dabei in etwa so aus:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
00 14    * * *   /home/test/test.sh

Möchte man nun die Ausgabe umleiten, so geschieht das indem man den Cronjob wie folgt ändert:

00 14    * * *   /home/test/test.sh > /home/test/test.log 2>&1

Das 2>&1 am Ende sorgt dafür das nicht nur die Standardausgabe in der Datei landet, sondern auch die Ausgaben welche sonst in der Fehlerkonsole landen würde.

Tweetping

Wenn man Tweetping das erste Mal öffnet, fühlt man sich an die Weltkarte aus einem Film erinnert in welchem jeden Moment die Welt untergeht.

Tweetping mit Weltkarte und Infofenster

Tweetping mit Weltkarte und Infofenster

Mittels Tweetping kann man Twitter in Echtzeit verfolgen. Es zeigt dabei für die einzelnen Kontinente die aktuellen Tweets an und blendet für jeden neuen Tweet einen weiteren Punkt auf der Weltkarte ein. Daneben gibt es noch Statistiken welche ebenfalls in Echtzeit aktualisiert werden. Zu finden ist Tweetping unter tweetping.net.