Kategorien
Streaming Server

Open Source Musikstreaming mit Koel

Ihre Famile würde auch gern Musik aus Ihrer MP3 Sammlung hören?

  • Auf dem Laptop kein Platz?
  • Auf dem Telefon nur 16 GB?
  • Aber auf Ihrer externen Festplatte mehr als 40GB Musik im MP3 Format?

Genau dieses Problem hatte Phan An, fand keine Lösung und startete das Projekt Koel, einen Streaming Server auf der Basis des PHP Frameworks Laravel und einem Client, basierend auf vue.js, der in jedem Browser läuft.

Laden Sie die 40 GB Musik einfach auf Ihren Server, installieren Sie Koel, richten Sie Benutzerkonten ein und alle können Musik hören!

Vorausetzungen

Auf dem Server müssen Laravel 5.1, MySQL oder MariaDB, PHP ab Version 5.6, sowie Node.js ab 0.10.40 installiert sein. Der Client läuft in jedem Browser.

Installation

Legen Sie sich zunächst eine MySQL Datenbank an

mysql -u root -p
Enter password:
mysql> CREATE DATABASE koel DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> CREATE USER 'koel'@'localhost' IDENTIFIED BY 'koel-passwort';
mysql> GRANT ALL PRIVILEGES ON koel.* TO 'koel'@'localhost' WITH GRANT OPTION;
mysql> exit;

Welchseln Sie in das Home Verzeichnis Ihres Users, in meinem Fall novatrend.

cd /home/novatrend

Laden Sie den Koel Quellcode von GitHub.

sudo git clone https://github.com/phanan/koel.git

Wechseln Sie in das koel Verzeichnis.

cd koel

und rufen Sie den Node Paketmanager npm auf.

npm install

Danach rufen Sie den PHP Paketmanager composer auf.

composer install

Anschliessend müssen Sie noch in die Konfiguurationsdatei .env die Datenbank Parameter, sowie E-Mail, Name und Passwort für den Administrator Account eintragen.

nano .env

Danach müssen Sie die Datenbank einmalig initialisieren.

php artisan init

Den Laravel Development Server starten Sie mit

php artisan serve --host=music.serverblogger.ch --port=8080

wobei die Werte für Host und die Portnummer natürlich von Ihrer individuellen Konfiguration abhängen.

Wenn Sie im Browser Ihren URL aufrufen, sehen Sie die Login Maske von Koel und können sich mit Ihren Admin Daten einloggen.

Koel - Login
Koel – Login
Nun müssen Sie noch Ihre MP3 Sammlung in ein Verzeichnis laden. Ich habe ein Verzeichnis music innerhalb des koel Verzeichnisses, aber ausserhalb des public Verzeichnisses angelegt (/home/novatrend/koel/music).

In den Settings von Koel müssen Sie diesen Pfad eintragen und auf den Button Scan klicken.

Koel - Musikverzeichnis
Koel – Musikverzeichnis
Das war es!

Nun können Sie im Bereich User Ihre Familie mit Benutzeraccounts versorgen.

Koel - Benutzer
Koel – Benutzer

Sie können Playlists erstellen und Herzchen vergeben. Auf dem Telefon läuft das Programm stabil und gut bedienbar, hier ein Beispiel unter iOS mit dem Safari Browser.

Koel - In Safari unter iOS
Koel – In Safari unter iOS
Na und nun kann die Party losgehen 🙂

Links:


tl;dr: Nutzen Sie Koel um Ihre MP3 Dateien von Ihrem Server zu streamen und zu hören!

Kategorien
Content Management Systeme

Hello, I’m Pagekit. A new modern CMS

Auf dem Joomlatag in Hamburg am 18. und 19. September ist mir das Content Management System Pagekit aufgefallen. Nach einer kurzen Demo war ich sehr beeindruckt. Pagekit ist Open Source Software. Das Projekt wurde von der Firma YOOtheme ins Leben gerufen und es steht unter der freien MIT Lizenz (Details). Es enthält einen Marketplace, in dem Entwickler Ihre Komponenten kostenlos oder kostenpflichtig anbieten können. Pagekit liegt momentan in der Beta Version vor. Die Version 1.0 ist für das vierte Quartal 2015 geplant (Roadmap). Pagekit arbeitet mit PHP und MySQL und setzt auf Symphony Components und Doctrine auf

Und nun muss ich Ihnen das einfach mal zeigen 🙂

Installation

Laden Sie sich den Quellcode von der Site pagekit.com und entpacken Sie ihn im Dokumentenverzeichnis des Webservers. Wenn Sie im Browser die Site aufrufen, erscheint der Installer und fragt zunächst nach der gewünschten Sprache. Diese Wahl gilt für die gesamte Site, momentan ist Pagekit nicht mehrsprachig installierbar.

Installation - Sprachauswahl
Installation – Sprachauswahl
Im nächsten Schritt müssen Sie die Parameter Ihrer Datenbankverbindung eingeben.
Installation - Datenbank Anbindung
Installation – Datenbank Anbindung
Der erste Benutzer wird Administrator!

Installation - Benutzer anlegen
Installation – Benutzer anlegen
Nun benötigt die Website noch einen Namen und eine Beschreibung.
Installation - Name der Website
Installation – Name der Website
Pagekit wird installiert und leitet Sie weiter auf die Anmeldung zum Dashboard (/admin/login).

Administration - Anmeldung
Administration – Anmeldung
Das Dashboard enthält zunächst drei sogenannte Widgets.
Administration - Dashboard
Administration – Dashboard
Diese Widgets können konfiguriert werden. Dazu fährt man mit der Maus über die rechte Ecke und klickt auf das Edit-Symbol. Formularfelder mit konfigurierbaren Parametern erscheinen dort. Dieses Prinzip, dass Steuerelemente nur dann erscheinen, wenn man Sie benötigt, zieht sich durch das ganze Projekt und sorgt für eine sehr aufgeräumte, saubere Oberfläche.
Widget Konfiguration
Widget Konfiguration
In der oberen linken Ecke des Dashboards befindet sich das Menu. Pagekit bietet, wie WordPress, die Möglichkeit Seiten und Artikel (Blog) einzustellen. Seiten werden in Site verwaltet, Blogeinträge in Blog. Im Bereich Benutzer werden die Benutzer angelegt und die Rollen zugewiesen und gepflegt, im Bereich System werden Einstellungen für das Medienverzeichnis, zur Sprache, zum Caching und zum Mail Versand konfiguriert. Das erinnert an Joomla. Hinter dem letzten Icon Marktplatz verbirgt sich der Pagekit Marketplace, der momentan (Anfang Oktober 2015) bereits einen Formulargenerator, einen Portfolio Manager, ein Google Analytics Widget für das Dasboard und ein Grundgerüst für eine Erweiterung enthält. Kostenlose und kostenpflichtige Erweiterungen lassen sich leicht schreiben und in der Zukunft in diesem Appstore anbieten. Auch ein paar Themes sind schon verfügbar. Momentan befindet sich das alles in der Realisierungsphase (The Marketplace).
Dashboard - Menü
Dashboard – Menü

Website

Die eigentliche Website enthält standardmässig ein Headerbild, einen Link zum Blog, den Textinhalt der Startseite und eine Fusszeile, die über Systemeinstellungen konfiguriert werden kann.

Website
Website

Content Managing

Das Verwalten des Inhalts ist Hauptaufgabe eines CMS. Pagekit bietet dazu eine Benutzer-, eine Datei- und natürlich eine Seitenverwaltung an. Die Bedienung geht leicht von der Hand. Der Editor beispielsweise hat einen Splitmode in dem Sie im Browser während des Editierens eine Live Vorschau haben.

Pagekit - Editor
Pagekit – Editor
Listen sind von der Darstellung her Joomla recht ähnlich, einzelne Seiten lassen sich jedoch sehr elegant per Drag and Drop zu einer Baumstruktur verschieben, ähnlich wie bei den Menüeinträgen in Drupal. Selbst die URL passt sich automatisch an! Die Startseite wird wie bei Joomla einfach markiert (Haussymbol).

Baumstruktur der Seiten
Baumstruktur der Seiten
Wenn Sie an dieser Stelle angekommen sind, macht es Ihnen vermutlich einfach Spass, das System zu benutzen. Es fühlt sich so ungemein „fluffig“ an und ich überlege bereits, welche Website ich damit realisieren könnte 🙂

Hier noch ein kurzes Video, wo Sie das Ganze mal live erleben können

Links


tl;dr: Wenn Sie die Benutzeroberfläche von Apple Produkten mögen, werden Sie das freie CMS Pagekit lieben 🙂

Kategorien
Content Management Systeme seafolly.ch

Yellow ist für Menschen die Websites machen

Den Text der Überschrift habe ich getweetet, nachdem ich das Yellow Demo ausprobiert hatte.

Mit Yellow können Sie kleine, merhsprachige Websites, Blogs und Wikis erstellen. Der Inhalt kann online bearbeitet werden. Yellow ist ein Flat-File-CMS und benötigt nur einen Webserver mit PHP (keine Datenbank). Die Firma Datenstrom, die das CMS entwickelt, stellt es frei zur Verfügung. Der Artikel 20 Flat-File-Systeme im Test vom 21. Oktober 2014 empfahl Yellow folgendermassen:

Wenn du ein bisschen experimentieren willst und Inspiration suchst, dann versuch es mal mit Yellow.

Nach dem Demo war auch ich neugierig und habe es ausprobiert. Schliesslich braucht unser Kunstprojekt seafolly.ch noch eine Website und da liegt es ja nahe, mit einem inspirirenden CMS mehrsprachig, aber klein anzufangen 🙂

Installation

So grundsätzlich können Sie Yellow einfach herunterladen und entpacken.
Dann ist es fertig installiert und Sie können loslegen.

Virtueller Server

Legen Sie die Konfigurationsdatei und die benötigten Dateiverzeichnisse an. Ich mache das hier mit dem Editor Nano unter Ubuntu 14.04 mit dem Apache Webserver:

sudo nano /etc/apache2/sites-available/seafolly.ch.conf

und kopieren Sie die folgenden Anweisungen hinein

<VirtualHost *:80>
  ServerAdmin webmaster@seafolly.ch
  ServerName seafolly.ch
  ServerAlias www.seafolly.ch
  DocumentRoot /var/www/seafolly.ch/public_html/    
  ErrorLog /var/www/seafolly.ch/logs/error.log
  CustomLog /var/www/seafolly.ch/logs/access.log combined
  <Directory "/var/www/seafolly.ch/public_html">
     Options FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
  </Directory>
</VirtualHost>

Speichern Sie die Datei ab.

Erstellen Sie ein Verzeichnis für die Website und darin ein Verzeichnis für die Logdateien:

sudo mkdir /var/www/seafolly.ch
sudo mkdir /var/www/seafolly.ch/logs

Wechseln Sie in das Unterverzeichnis der Website:

sudo cd /var/www/seafolly.ch/

Laden Sie den Quellcode aus Github (oder per Download und Entpacken des Zip Pakets):

sudo git clone https://github.com/datenstrom/yellow.git

Bennennen Sie das Verzeichnis yellow in public_html um:

sudo mv yellow public_html

Geben Sie dem Webserver User die Eigentumsrechte:

sudo chown -R www-data:www-data /var/www/seafolly.ch/public_html/

Danach können Sie die Apache Konfigurationsdatei aktivieren und den Apache Service neu laden.

sudo a2ensite seafolly.ch.conf
sudo service apache2 reload

Sie können nun im Browser die entsprechende URL aufrufen, in meinem Fall http://seafolly.ch

Erster Aufruf von Yellow
Erster Aufruf von Yellow

Benutzeraccount anlegen

Da es keine Datenbank gibt, muss irgendwo ein Benutzername und ein Passwort erzeugt und hinterlegt werden. Das kann man entweder online auf der datenstrom.se Site machen oder auf der Konsole.
Ich entscheide mich für die Konsole.

Wechseln Sie in das Verzeichnis, in dem sich die yellow.php Datei befindet (in meinem Fall /var/www/seafolly.ch/public_html)

Erzeugen Sie ein Benutzerkonto mit dem Befehl:

sudo php yellow.php user email@example.com horsebattery

Ihr Benutzername ist email@example.com und das Passwort horsebattery.
Die E-Mail Adresse und der Passworthash werden in der Datei system/config/user.ini eingetragen.

Loggen Sie sich ein!

Anmeldung
Anmeldung

Inhalt erstellen ändern und löschen

Nun sieht Yellow etwas anders aus. Sie können jetzt Seiten editieren, hinzufügen und löschen.
Probieren Sie es aus!
Text schreiben Sie in der Auszeichnungssprache Markdown, beispielsweise

Normal *Kursiv* **Fettschrift** `Code`
* Punkt eins
* Punkt zwei
* Punkt drei

Mit dem + und dem – Zeichen können Seiten erzeugt und gelöscht werden.

Ansicht nach dem Anmelden
Ansicht nach dem Anmelden

Sie können die Inhalte über den Browser und über das Dateisystem bearbeiten.

Das Prinzip von Seiten und Navigationseinträgen spiegelt sich im Dateisystem.
Im Verzeichnis content haben Sie zwei weitere Unterverzeichnisse:

01-Home
02-About

In jedem Verzeichnis finden Sie eine page.txt Datei. In dieser page.txt Datei befindet sich Ihr Markdown Text. Wenn Sie mit dem + Zeichen eine neue Seite angelegt haben, so befindet sie sich in dem Verzeichnis, dessen page.txt sie gerade aufgerufen hatten. Eine deutschsprachige detailierte Beschreibung finden Sie unter https://github.com/datenstrom/yellow/wiki/Adding-content-de.

Bilder und Dateien

Das Verzeichnis media/downloads enthält Dateien, das Verzeichnis media/images Bilder

![image](icon.png)

zeigt ein Bild aus dem Verzeichnis media/images an. Probieren Sie es aus

Ein Seite mit Bild
Ein Seite mit Bild

Es gibt auch ein Image Plugin um Bildgrössen zu ändern!

Einstellungen, Mehrsprachigkeit, Plugin und Themes

Alle Einstellungen befinden sich im system Verzeichnis.

In der config.ini habe ich die folgenden Einstellungen vorgenommen:

sitename = seafolly.ch
author = Hagen Graf
language = de
theme = flatsite

multiLanguageMode = 1

Als ich die Seite wieder aufrief, bekam ich folgende Fehlermeldung

Something went wrong. Language ‚de‘ does not exist!

Die Standardsprache ist Englisch und damit auch alle Seiten.

Extensions laden

Es gibt zusätzliche Sprachen, Plugins und Themes.
Die einfachste Variante ist, diese zunächst zu laden und bei Bedarf ins entsprechende Systemverzeichnis zu kopieren (https://github.com/datenstrom/yellow-extensions).

Damit ich eine mehrsprachige Seite erhalte, muss ich die Ordnerstruktur für die Inhalte anpassen

einsprachig Englisch

content/1-home
content/2-about

Mehrsprachig Deutsch/Englisch/Französisch

content/1-en/1-home
content/1-en/2-about
content/2-de/1-startseite
content/2-de/2-ueber
content/3-fr/1-accueil
content/3-fr/2-apropos

Den Seiten (page.txt) sollten Sie eine Language Variable hinzufügen

---
Title: Startseite
Language: de
---
Willkommen bei bei Seafolly

Die jeweiligen Sprachdateien müssen ins system/config Verzeichnis geladen werden.
Bei mir sieht der Inhalt des Verzeichnisses so aus:

config.ini      
language-en.ini 
language-de.ini 
language-fr.ini 
page-error-401.txt 
page-error-404.txt 
page-error-424.txt 
page-error-500.txt 
page-new-default.txt 
user.ini
robots.txt

Zwischen den Sprachen wechseln Sie im Browser

  • English – seafolly.ch
  • Deutsch – seafolly.ch/de
  • Französisch – seafolly.ch/fr

Individuelle Navigation

Irgendwo müssen Sie die Links zu den anderen Sprachen anzeigen.

Die einfachste Variante sind vermutlich zusätzliche Links in der Navigation, also los.

Die Navigation liegt in system/themes/snippets/navigation.php

Erweitern Sie sie einfach um die Sprachlinks

<?php $pages = $yellow->pages->top() ?>
<?php $yellow->page->setLastModified($pages->getModified()) ?>
<div class="navigation">
<ul>
<?php foreach($pages as $page): ?>
<li><a<?php echo $page->isActive() ? " class=\"active\"" : "" ?> href="<?php echo $page->getLocation() ?>"><?php echo $page->getHtml("titleNavigation") ?></a></li>
<?php endforeach ?>
<li><a href="/">EN</a></li>
<li><a href="/de">DE</a></li>
<li><a href="/fr">FR</a></li>
</ul>
</div>

<div class="navigation-banner"></div>

Das Ergebnis sieht dann so aus:

Yellow mit individualisierter Navigation
Yellow mit individualisierter Navigation

Plugins und Themes

Wie Sie bereits beim Download der Extensions gesehen haben, gibt es u.a. Plugins mit den Namen blog, disqus, fontawesome, image, search, toc, wiki, breadcrumbs, googlemaps, imagegallery, piwik, sitemap, soundcloud, userpermission, youtube, contact, feed und viele andere mehr.

Wenn Sie bis hierher mitgemacht haben, beginnt Ihnen die Sache vermutlich Spass zu machen, daher höre ich jetzt auf mit der Vorstellung und wünsche Ihnen viel Erfolg beim Ausprobieren 🙂

Für seafolly.ch werde ich erstmal bei Yellow bleiben.

Links


tl;dr: Yellow ist ein inspirierendes, dateibasiertes CMS für Menschen die Websites erstellen.

Kategorien
seafolly.ch Soziale Netze

Die Twitter API – einfach Tweets auslesen und weiterverarbeiten

Unser Kunstprojekt seafolly.ch hat einen Twitter User und ich wollte die Tweeterei irgendwie teilautomatisieren. Dazu probierte ich IFTTT aus (Ein Automat für #kunstprojekt) und das Ergebnis war schon beeindruckend. Der Haken an Services wie IFTTT ist, dass „nur“ vordefinierte Funktionen zur Verfügung stehen. Und wenn mir die nicht ausreichen oder ich einen anderen Anwendungsfall habe, dann geht es eben nicht.

Aber wie könnte man das anders machen?

Twitter API

Twitter bietet eine Schnittstelle (API) an, auf die man mit unterschiedlichen Programmiersprachen zugreifen kann. Man kann Daten abfragen, auf dem eigenen Server verarbeiten und dann damit „machen, was ich will“.
Die Anzahl der Zugriffe auf die Twitter API ist beschränkt, reicht jedoch für unsere Anforderungen aus.

We divide the rate limit window into 15 minute chunks per endpoint, with most individual calls allowing for 15 requests in each window. In most cases, you can query the API on a per endpoint basis more than the v1 API, and other widely used calls have been increased to 180 requests per window.
Twitter API Dokumentation

Das Prinzip dahinter: Kleinere Zugriffsmengen sind kostenlos, grössere nicht.

Damit das kontrolliert werden kann, muss man sich mit seinem Twitter User entsprechend registrieren.

Früher war das alles mal einfacher, da konnte jeder öffentlich Anfragen an Twitter stellen und erhielt Daten zurück (wie sich twitter mit der twitter-api 1.1 einigelt).
Als freie Alternative zu Twitter gibt es beispielsweise pump.io (pump.io – die Basis für dezentrale soziale Netzwerke?).

Die Twitter-API liefert Ergebnisse in XML und JSON Format, ist also grundsätzlich von jeder Programmiersprache aus nutzbar. Meistens werden die Sprachen PHP, Python oder Ruby benutzt.

Ziel

Für den Anfang möchte ich die Tweets von @seafollych auf einer Website einbinden.
Als nächsten Schritt würde ich gern Tweets mit dem Hashtag #kunstprojekt retweeten.

Twitter Account einrichten und App registrieren

Einen Twitter Account habe ich bereits (@seafollych).
Auf der Website https://apps.twitter.com/ muss ich für mein Vorhaben eine Application anlegen. Name und Description (Beschreibung) sind frei wählbar, das Website Feld enthält die URL zum Ihrem Angebot. Ich arbeite auf unserem Testserver.

Twitter App erstellen
Twitter App erstellen
Die Callback URL kann in unserem Fall leer bleiben.
Sie müssen das „Developer Agreement“ bestätigen (und auch lesen) und können dann die Twitter Application erstellen.

Im nächsten Schritt müssen Sie sich Access Tokens erzeugen.

Twitter App Keys and Access Tokens
Twitter App Keys and Access Tokens
Die Keys (Schlüssel) und das Access Token (Zugriffscode) benötigen Sie für Ihre spätere Abfrage um sich gegenüber Twitter zu identifizieren.

Twitter API mit PHP abfragen

Ich nutze als Programmiersprache PHP und eine leere PHP Datei.

PHP-Datei erstellen

Legen Sie in einem Unterverzeichnis Ihrer Wahl eine Datei twitter.php mit folgendem Inhalt an.

<?php
echo "<h2>seafolly.ch Tweets</h2>";
?>

Wenn Sie die Datei in Ihrem Browser aufrufen (z.B. https://serverblogger.ch/seafolly/twitter.php) und den Text sehen, kann es weitergehen.

Twitter API für PHP

Sie benötigen eine passende PHP Bibliothek. Die wohl bekannteste ist die von J7mbo (https://github.com/J7mbo/twitter-api-php/).
Laden Sie sie herunter, packen Sie sie aus und kopieren Sie die Datei TwitterAPIExchange.php in das Verzeichnis, in dem auch Ihre twitter.php Datei liegt.

Das Programm

In Ihrer twitter.php Datei müssen Sie nun folgende Schritte in PHP codiert ausführen.

  1. Twitter API Bibliothek einbinden
  2. Twitter Access Token und Key angeben
  3. Art der Anfrage festlegen
  4. HTTP Methode festlegen
  5. Abfrage starten und die Rückgabe in einem Array speichern
  6. Array durchlaufen und die Tweets ausgeben

Hört sich doch gar nicht so kompliziert an.
In PHP-Code sieht das so aus:

1. Twitter API Bibliothek einbinden

Wenn die Datei im gleichen Verzeichnis liegt, läd die require_once() Funktion die gewünschte Datei.

require_once('TwitterAPIExchange.php');

Twitter Access Token und Key angeben

Die Variable $settings ist ein Array und es werden die vier Werte darin gespeichert

$settings = array(
  'oauth_access_token' => "IHR_WERT",
  'oauth_access_token_secret' => "IHR_WERT"
  'consumer_key' => "IHR_WERT",
  'consumer_secret' => "IHR_WERT"
);

Art der Anfrage festlegen

Man kann unterschiedliche Arten von Anfragen festlegen. In unserem Fall wollen wir die eigene Timeline auslesen. Dazu muss die entsprechende URL in einer Variable gespeichert werden. Zusätzlich speichere ich noch den gewünschten Usernamen in einer Variable um ihn später einfacher nutzen zu können.

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$username= "seafollych";

HTTP Methode festlegen

Das HTTP Protokoll bietet unterschiedliche Methoden an, GET zum Lesen von Daten und POST zum posten von Daten.
Wir wollen lesen, also GET!

$requestMethod = "GET";

Abfrage starten und die Rückgabe in einem Array speichern

Die Variable $getfield enthält die Daten, die wir an die URL anhängen wollen, damit sie hinterher so aussieht:

https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=seaf…

Der angehängte Teil wird mit folgendem Befehl erzeugt:

$getfield = '?screen_name='.$username.'&count=5';

Für die Abfrage muss ein Objekt erstellt werden.
Wir übergeben dazu den Inhalt der Variable $settings an die TwitterAPIExchange Klasse und speichern das Ergebnis in der Variable $twitter.

$twitter = new TwitterAPIExchange($settings);

Um ein Ergebnis zu erhalten, müssen wir den Text für den URL Anhang, die URL und die Abfragemethode übergeben und dann die Abfrage starten.

$twitter->setGetfield($getfield)
        ->buildOauth($url, $requestMethod)
        ->performRequest()

Das Ergebnis ist ein JSON codierter Textstring, der für das menschliche Auge und PHP ein wenig unhandlich ist ;).
Daher bereiten wir ihn mit der Funktion json_decode() auf und speichern das Ergebnis in der Variablen $string.

$string = json_decode($twitter->setGetfield($getfield)
                 ->buildOauth($url, $requestMethod)
                 ->performRequest(),$assoc = TRUE);

Ab hier könnte man sich das Ergebnis schon mal ausgeben lassen, der ganze Code sieht so aus:

<?php
require_once('TwitterAPIExchange.php');

$settings = array(
  'oauth_access_token' => "...",
  'oauth_access_token_secret' => "...",
  'consumer_key' => "...",
  'consumer_secret' => "..."
);

$username= "seafollych";
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name='.$username.'&count=5';
$twitter = new TwitterAPIExchange($settings);
$string = json_decode($twitter->setGetfield($getfield)
                 ->buildOauth($url, $requestMethod)
                 ->performRequest(),$assoc = TRUE);

// Test ob ein Fehler vorliegt
if($string["errors"][0]["message"] != "") {
  echo "<h3>Problem</h3>
        <p>Twitter gibt die folgenden Fehlermeldung zurücke</p>
        <p><em>".$string[errors][0]["message"]."</em></p>";
  exit();
}

// Ausgabe
echo "<pre>";
print_r($string);
echo "</pre>";
?>

twitter.php

Die Ausgabe sieht etwa so aus:

Ergebnis der Abfrage
Ergebnis der Abfrage
Offensichtlich haben wir Daten erhalten und müssen diese nun noch formatieren.
Normalerweise macht man das in einer for each Schleife.
Im Antwort-Array hat jeder Tweet eine Nummer. Die Schleife geht Nummer für Nummer durch und speichert alle Daten zu einem Tweet in der Variable $items. Die einzelnen Werte werden dann aus der Variable $items extrahiert. Das Datum habe ich mit einer PHP Funktion umfomatiert date(‚H:i, d.m.Y‘, strtotime($items[‚created_at‘])); und den Text mit der PHP Funktion utf8_decode() bearbeitet, um eine richtige Darstellung der deutschen Umlaute zu erhalten. Der Rest sind HTML Tags. Sie können die Ausgabe beliebig komplex gestalten, meine Variante ist die Minimalversion.

echo "<ul>";
foreach($string as $items){
  echo '<li>';
  echo '<a href="https://twitter.com/';
  echo $items['user']['name'];
  echo '/status/';
  echo $items['id'];
  echo '"><small>';
  $fdate = date('H:i, d.m.Y', strtotime($items['created_at']));
  echo $fdate;
  echo '</small></a>: ';
  echo utf8_decode($items['text']);
  echo '</li>';
}
echo "</ul>";

Wenn Sie das Skript laufen lassen, erhalten Sie die folgende Ausgabe:

per PHP abgefragte Tweets
per PHP abgefragte Tweets
Hier nochmal der gesamte Quellcode:

<?php
require_once('TwitterAPIExchange.php');

$settings = array(
  'oauth_access_token' => "...",
  'oauth_access_token_secret' => "...",
  'consumer_key' => "...",
  'consumer_secret' => "..."
);

$username= "seafollych";
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name='.$username.'&count=5';
$twitter = new TwitterAPIExchange($settings);
$string = json_decode($twitter->setGetfield($getfield)
                 ->buildOauth($url, $requestMethod)
                 ->performRequest(),$assoc = TRUE);

// Test ob ein Fehler vorliegt
if($string["errors"][0]["message"] != "") {
  echo "<h3>Problem</h3>
        <p>Twitter gibt die folgenden Fehlermeldung zurücke</p>
        <p><em>".$string[errors][0]["message"]."</em></p>";
  exit();
}

// Ausgabe
foreach($string as $items)
    {
        echo '<li>';
        echo '<a href="https://twitter.com/';
        echo $items['user']['name'];
        echo '/status/';
        echo $items['id'];
        echo '"><small>';
        $fdate = date('H:i, d.m.Y', strtotime($items['created_at']));
        echo $fdate;
        echo '</small></a>: ';
        echo utf8_decode($items['text']);
        echo '</li>';
    }
echo "</ul>";

?>

twitter.php

Wenn Sie bis hier gekommen sind, dann zunächst mal herzlichen Glückwunsch. Das war gar nicht schwer und der Erfolg ist doch ermutigend.

Im nächsten Schritt wollte ich die Twitter nach Tweets mit dem Hashtag #kunstprojekt suchen. Wenn ich einen entsprechenden Tweet finde, will ich ihn posten oder retweeten. Das ist grundsätzlich möglich, sprengt aber doch den Rahmen des Artikels hier.
Daher möchte ich an dieser Stelle erstmal aufhören und Ihnen noch ein paar Links zum weiterstöbern mit auf den Weg geben.

Links:


tl;dr: Tweets per API auslesen und verarbeiten ist nicht schwer

Kategorien
Content Management Systeme

Die Fotografin arbeitet mit Koken

Die Fotografin benötigt eine Website!

Schön soll sie sein, anmutig, leicht zu pflegen, einfach zu administrieren, sie soll den Besuchern Freude machen und Aufträge bringen. Alben muss es geben, die per Passwort geschützt werden können um Auftraggebern die Bilder risikolos zu zeigen. Wasserzeichen sollen möglich sein, damit keiner die Fotos einfach so verwendet.

Achja – und schön wäre noch eine Anbindung an Adobe Lightroom und … nicht zu vergessen … kosten sollte es auch nicht viel, weil … naja, Sie wissen schon.

Das Leben der Fotografin ist hart (aber schön).

Ich hab’s mit WordPress versucht und war schon nah dran – aber es war nicht schön. Drupal hatte ich auf der Zunge, habe es aber doch nicht erwähnt. Ein kurzer Versuch in Joomla brachte auch kein Lächeln auf die Lippen der Fotografin. Sie zeigte mir ein paar Online Services wie beispielsweise squarespace.com. Die Services sind wunderschön und bieten alles, wirklich alles, was sich die Fotografin wünscht. Sie kosten monatlich allerdings durchaus stattliche Beträge. Die Open Source Alternativen überzeugten die Fotografin nicht.

Diese Marktnische hat Koken für sich entdeckt und bietet ein wirklich ansehnliches, auf PHP und MySQL basierendes, Content Management System an. Sie können es auf Ihrem Server kostenlos installieren.

Um zusätzliche Plugins und Theme herunterzuladen müssen Sie sich bei koken.me ein Benutzerkonto anlegen. Die Plugins und Themes sind teilweise kostenpflichtig, teilweise kostenlos. Sie können auch eigene Pugins und Themes schreiben und in Ihre Seite einbauen.

UPDATE 24.08.2016
+++ ACHTUNG +++
Alle Webhostings bei NOVATREND arbeiten mit der MySQL Version 5.6. Momentan ist Koken leider noch nicht kompatibel mit der MySQL Version 5.6!
+++ ACHTUNG +++

Installation

Legen Sie sich einen virtuellen Host , eine MySQL Datenbank und ein Datenbank Benutzerkonto an.

Anlegen von MySQL Benutzer und Datenbank in der Shell:

mysql -u root -p
Enter password:
mysql> CREATE USER 'koken'@'localhost' IDENTIFIED BY 'IHRPASSWORT';
mysql> CREATE DATABASE koekn;
mysql> GRANT ALL ON koken.* TO 'koken'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

Laden Sie sich von der Site http://koken.me/#dlkoken den Koken Installer und entpacken den Inhalt des ZIP Pakets Koken_Installer.zip in das Dokumentverzeichnis des Webservers.

Wenn Sie nun über einen Browser die entsprechende Domain aufrufen, startet der Installer und überprüft ob in Ihrem System alle Voraussetzungen zur Installation erfüllt sind.
In meinem Fall scheint alles vorhanden zu sein.

Installation - Server Test
Installation – Server Test

Nach einem Klick auf den Button Begin Installation werden Sie aufgefordert ein Administratorkonto anzulegen.
Mit diesem Benutzer werden Sie sich später im Administrationsbereich anmelden.
Koken kann nur diesen einen Nutzer verwalten, eignet sich also nicht für einen Mehrbenutzerbetrieb.

Installation - Benutzer anlegen
Installation – Benutzer anlegen

Als nächstes werden die Verbindungsdaten zur Datenbank abgefragt.

Installation - Datenbank Anbindung
Installation – Datenbank Anbindung

Als nächsten Schritt legen Sie die Zeitzone fest.

Installation - Zeitzone
Installation – Zeitzone

Nun beginnt die eigentliche Installation.
Nach einem Klick auf den Button Install now wird das Programmpaket von den Koken Servern auf Ihren Server geladen und auf Basis der Parameter, die Sie bereits eingegeben haben, konfiguriert.
Die Tabellen werden in der Datenbank angelegt und nach der Installation werden Sie auf die Anmeldung zum Administrationsbereich weitergeleitet.

Installation - Download
Installation – Download

Das Basispaket von Koken ist nun installiert.

Erste Schritte

Melden Sie sich mit Ihrer E-Mail Adresse und dem Passwort an.

Anmeldung im Adminbereich
Anmeldung im Adminbereich

Beim ersten Anmelden erscheint ein Fenster mit einer Tour durch Koken.

Tour
Tour

Der Administrationsbereich besteht aus einer Bibliothek (Library), einem Blog- und Seitenbereich (Text/Essay), einer Websitevorschau und dem Koken Store in dem zusätzliche Plugins und Themes heruntergeladen werden können.

Im Library Tab können Fotos durch einfaches Ziehen in den mittleren Bereich hochgeladen werden.

Hochladen von Photos
Hochladen von Photos

Sie können Fotos zu Alben gruppieren und es gibt Feature und Favoriten Funktionen.

Neue Texte können Sie in Form von Blogeintragen (Essay) oder Seiten mit Link in der Navigation (Page) anlegen.

Essay oder Page anlegen
Essay oder Page anlegen

Der Editor ist natürlich ein WYSIWYG Editor, es gibt aber auch eine HTML Ansicht.

Editor in geteilter Ansicht
Editor in geteilter Ansicht

Gespeichert wird automatisch und Sie können sich die Änderungen in der Vorschau ansehen.
Die endgültige Freigabe und Veröffentlichung auf der Website der Texte erfolgt nach einem Klick auf den Button Update site.

Plugins

Im Koken Store finden Sie kostenlose und kostenpflichtige Plugins und Themes.
Um diese installieren zu können, müssen Sie sich ein Benutzerkonto bei Koken anlegen.
Jede Koken Installation wird in Ihrem Benutzerkonto vermerkt.

Store mit zusätzlichen Plugins
Store mit zusätzlichen Plugins

Es gibt wenige, aber sinnvolle Plugins, beispielsweise die bereits angesprochenen Wasserzeichen und der Passwortschutz für Kundenordner. Beide Plugins schlagen mit jeweils 35 US $ zu Buche, müssen aber natürlich im ersten Schritt noch nicht installiert werden. Auch die freien Plugin müssen über einen Warenkorb Prozess heruntergeladen werden.

Anbindung an Adobe Lightroom

Das Adobe Lightroom Plugin ist frei verfügbar und ermöglicht die Zusammenarbeit mit Adobe Photoshop Lightroom, einer Software zur Bearbeitung und Verwaltung von Digitalfotos.

Anbindung an Lightroom
Anbindung an Lightroom

Themes

Es gibt Themes im Store, die Sie in einer Live-Vorschau auch ausprobieren können.

Auswahl eines Themes
Auswahl eines Themes

Die Navigationsstruktur innerhalb eines Themes liegt fest. Sie können bestehende Links aktivieren und deaktivieren und zusätzliche Links, beispielsweise zu einem Album oder einer About me Seite zusammenfügen.

Navigation konfigurieren
Navigation konfigurieren

Das Ergebnis

Nach kurzer Zeit gibt es als Ergebnis eine Portfolio Website, die der Fotografin gefällt 🙂

Fertige Website
Fertige Website

Links

http://koken.me


tl;dr: Mit Koken lassen sich hervorragende Portfolio Seiten für Fotografen und Fotografinnen erstellen