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
Konferenzsysteme

Webkonferenzen mit Apache OpenMeetings

Webkonferenzsysteme mit Whiteboard, Screensharing, Sprach- und Videoübertragung waren und sind komplexe Anwendungen mit denen, wenn alles gut funktioniert, einfach und effektiv Onlinevorlesungen, Webinare, sowie Firmen- und Projektmeetings abgehalten werden können.

Der Einschub „wenn alles funktioniert“ ist nicht zu unterschätzen.

Es geht um folgende Arbeitsschritte:

  • Meeting planen, Unterrichtsmaterialien vorbereiten und hochladen
  • Teilnehmer einladen
  • Sicherstellen, dass alle Teilnehmer problemlos den Konferenzraum finden und die Sprach, Video- und Screensharing Funktionen funktionieren.
  • Genug Bandbreite pro Teilnehmer, je nach Art des Meetings
  • Genug Kapazität des Servers bei >100 Teilnehmern
  • Aufnehmen und Speichern des Meetings zum späteren Nachhören

Da in der Vergangenheit (und auch heute) in diesem Bereich die Lizenzen von proprietäten Webkonferenzsystemem sehr teuer waren, sind viele Anwender auf Skype und Google Hangouts ausgewichen. Innerhalb von Schulen, Firmen oder anderen Organisation ist es allerdings sehr schwer bis unmöglich, Teilnehmern mit unterschiedlichen technischen Voraussetzungen über solche „Alternativtools“ Zugang und effektives Arbeiten in virtuellen Räumen zu ermöglichen.

Ziel

Nehmen wir an, das Ziel Ihrer Organisation ist, ein eigenes Open Source Webkonferenzsystem auf dem eigenen Server aufzusetzen und die Meetings beispielsweise über die eigene Website mit Joomla, Drupal oder Moodle anzubieten.

Apache OpenMeetings

OpenMeetings ist eine freie Webkonferenzsystem. Ziel des Systems ist, in wenigen Schritten eine Besprechung aufzusetzen, in der man per Audio/Video, Whiteboard, Screensharing und Chat mit mehreren Teilnehmern eine Konferenz durchführen kann.

Apache OpenMeetings baut auf dem freien Rich Internet Application Framework OpenLaszlo und dem freien Streaming Server Red5 auf. Die Serveranwenung ist in Java geschrieben und benötigt ausserdem LibreOffice, ImageMagic, Sox, Swftools, FFmpeg und MariaDB. Ein ausführliche Installationsanleitung für Ubuntu 14.04 finden Sie hier (PDF iconInstallation OpenMeetings 3.0.x on Ubuntu 14.04.pdf ).

Nach der Installation können sich, je nach Konfiguration, Benutzer registrieren und in einem Dashboard Konferenzen planen und Teilnehmer einladen.

Registrierung OpenMeetings
Registrierung OpenMeetings
OpenMeetings - Dashboard
OpenMeetings – Dashboard

Konferenz

Es gibt einen Kalender im System und die Teilnehmer erhalten E-Mails mit dem Link zum Konferenzraum.
Der Raum steht komplett im Browser zur Verfügung, die Teilnehmer benötigen keine Zusatzsoftware auf Ihrem Computer.

Allerdings wird der Flash Player benötigt, um die Sprach- und Video Übertragung zu ermöglichen. Dieses Problem kann man allerdings durch Nutzung des Browsers Google Chrome entschärfen. Dort ist ein Flashplayer bereits integriert und muss nicht separat auf dem System installiert sein.

Im unteren Bereich des Konferenzraums steht ein Chat zur Verfügung.Der Konferenzraum sieht für den Moderator so aus:

OpenMeetings - Raum mit Whiteboard
OpenMeetings – Raum mit Whiteboard

Video und Audio funktionieren erstaunlich gut. In der Konferenz auf dem Screenshot oben gab es nur zwei Teilnehmer mit einer schlechten Internet-Verbindung. Das Kamerabild kann in verschiedenen Qualitäten übertragen und auch abgeschaltet werden um Bandbreite zu sparen.
Die Netzwerkverbindung kann bei Bedarf von jedem Teilnehmer überprüft und angepasst werden.

OpenMeetings - Netzwerktest
OpenMeetings – Netzwerktest

Der Moderator kann Rechte an andere Teilnehmer geben, beispielsweise ob der Teilnehmer auf dem Whiteboard zeichnen darf.

OpenMeetings - Teilnehmer
OpenMeetings – Teilnehmer

Innerhalb des Raums gibt es sogenannte Actions. Es stehen 30 Sprachen zu Lokalisierung zu Verfügung. Das Whiteboard und die PDF Anzeige funktionieren auch bei schlechten Internetverbindungen hervorragend.

OpenMeetings - Actions
OpenMeetings – Actions

Meetings können aufgezeichnet und gespeichert werden.

Einbindung in andere Systeme

Wenn Sie den Zugang zu den Meetings beispielsweise über Ihre Website ermöglichen wollen, so gibt es Plugins für Moodle, Joomla, Drupal, Redmine, SugarCRM und andere Systeme.

Hier ein Beispiel für die Nutzung in Joomla:

Die Joomla Komponente ist leider veraltet (Joomla 2.5), funktioniert aber grundsätzlich und zeigt, was möglich ist.

Fazit

Bei meinem Test funktionierte alles prima und ich war positiv überrascht. Die Einbindung in gängige CMS ist grundsätzlich möglich und für ältere Versionen auch lauffähig vorhanden. Die Apache OpenMeetings Serversoftware wird weiterentwickelt und das letzte Release (3.0.6) ist 3 Monate alt, also recht frisch :).

Links


tl;dr: Mit Apache OpenMeetings können Sie ein Webkonferenzsystem auf Ihrem Root-Server betreiben.

Kategorien
Content Management Systeme E-Commerce

Ein Online Shop mit Joomla & J2Store

Es ist keine Frage, der Onlinehandel boomt und wird jährlich grösser. Auch immer mehr kleinere Unternehmen würden gern Ihre Waren in einem Shop anbieten, sind sich aber oft unsicher über die Auswahl der Shop-Software.

Da viele kleine Unternehmen eine Joomla Websites betreiben, möchte ich heute eine einfache, aber effektive Erweiterung vorstellen, J2store.

J2store kann:

  • aus jedem Joomla Inhaltsartikel ein verkaufbares Produkt machen. Das kann ein versendbares, physisches Produkt sein oder ein downloadbares wie ein eBook, ein Musikstück, ein Softwarepaket oder ein Foto.
  • Die Produkte können Optionen wie Farben, Grössen, Dateitypen oder auch individuelle Texte (wichtig beim Gravieren oder Bedrucken) enthalten.
  • Die Bezahlung kann online erfolgen oder bei Abholung im Geschäft.
  • J2store kann auch als reiner Katalog ohne Preise betrieben werden.
  • Es gibt zahlreiche Erweiterungen für Gutscheine, Rabattaktionen und kundenspezifische Preise
  • Mehrwertsteuer kann im Preis enthalten sein oder auf Basis des Preises berechnet werden.
  • Ein einfache Lagerhaltung ist integriert, so dass Sie einen Überblick über Be- und Rückstände haben
  • Versandpreise können auf Basis von Gewicht und Menge errechnet oder ab einem Mindestbestellwert verandkostenfrei sein
  • J2store läuft im Standard Template von Joomla responsiv, kann also auch gut auf mobilen Endgeräten benutzt werden.
  • Wenn Joomla mehrsprachig eingerichtet ist, ist die J2store Komponente ebenfalls mehrsprachig verfügbar.

Das hört sich ja wunderbar an, wo ist der Haken?

Es gibt keinen Haken bei den Funktionen, alles was ich oben beschrieben habe, funktioniert tatsächlich und ist kostenlos.

Aber!

Wie bei Joomla Erweiterungen üblich, sind manche Plugins kostenpflichtig, so beispielsweise das Plugin für die Zahlungsmethode PayPal. Es kostet allerdings nur 10 US$ und stellt somit keine grössere Investion dar.
Das Versand-Plugin für UPS ist übrigens kostenlos, für DHL kostet es 20 US$.

J2store nutzt die eigene Erweiterung im Extension directory und so können Sie sich einen guten Eindruck über die Bedienbarkeit, das Look & Feel der Erweiterung und auch deren Erweiterungsmöglichkeiten machen.

Beispiel

Online Shops sind immer individuell, sie wollen sich ja von der Konkurrenz abheben.
Um das Beispiel hier im einfach zu halten, nehme ich etwas aus meinem Leben. Ich baue hin und wieder Gartenstühle. Das Holz dafür bekomme ich aus einem Wald in Norddeutschland. Alle paar Jahre hole ich Holz, säge es zurecht und bei Bedarf baue ich dann Stühle, Tische oder Bänke. Nehmen wir an, Sie haben ein ähnliches Projekt oder Geschäft.
Sie könnten online die Produkte, oder vielleicht auch einen Bauplan-Download verkaufen.

Installation

Zunächst müssen Sich sich die aktuelle Version von Joomla installieren (siehe Artikel Installation der 5 verbreiteten Content Management Systeme).

Deutsche Sprachdateien

Wenn Sie die original Joomla Version von der joomla.org Website nehmen, müssen Sie noch die deutschen Sprachdateien installieren. Gehen Sie dazu in den Administrationsbereich (Extensions -> Extension Manager -> Install Languages), wählen German aus und installieren das Paket.

Sprachdateien in Joomla installieren
Sprachdateien in Joomla installieren
Danach müssen Sie Joomla noch mittteilen, welches die Standardsprache sein soll. Gehen Sie dazu auf Extensions -> Language Manager und wählen German als im Tab Installed-Site (die eigentliche Website) UND im Tab Installed-Administrator als Standardsprache aus. Wenn Sie sich dann aus- und wieder einloggen, ist Ihre Joomla Version komplett mit deutschen Texten versehen.
Joomla - Standardsprache festlegen
Joomla – Standardsprache festlegen

J2store installieren

Zusätzliche Erweiterungen installieren Sie in Joomla unter (jetzt auf Deutsch) Erweiterungen -> Erweiterungen. Suchen Sie einfach nach j2store und klicken den Install Button.

J2Store installieren
J2Store installieren

Im Menu des Joomla Administrationsbereich finden Sie jetzt einen neuen Menüpunkt. Die Texte sind allerdings noch auf Englisch.

J2store Menu - Englisch
J2store Menu – Englisch

Um auch hier eine deutschsprachige Umgebung zu erhalten, müssen Sie die entsprechende Sprachdatei installieren. Eine Übersicht über die verfügbaren Sprachen finden Sie unter http://j2store.org/translations/j2store3.html. Laden Sie sich das deutsche Sprachpaket herunter (de-DE.com_j2store.zip) und installieren Sie es unter Erweiterungen -> Erweiterungen -> Paketdatei hochladen. Nun erscheinen alle Texte von J2store ebenfalls auf Deutsch.

Konfiguration und erste Schritte

Um das Beispiel mit dem Gartenmöbeln wieder aufzunehmen, benötigen wir jetzt mindesten ein Produkt und die Grundkonfiguration im Shop (Adresse, MwSt-Behandlung, Zahlungsbedingungen, Versandbedingungen).

Alle Einstellungen für die J2store Erweiterung finden Sie unter J2Store -> Einstellungen. Die Felder sind weitgehend selbsterklärend. Eine ausführliche Erklärung finden Sie im englischen Benutzerhandbuch (http://j2store.org/support/user-guide.html)

J2Store - Einstellungen
J2Store – Einstellungen

Produkt erstellen

Die kluge Idee von J2Store ist, jeden redaktionellen Joomla Artikel zu einem Produkt machen zu können.
Um ein Produkt zu erstellen, müssen Sie also entweder einen Artikel neu in Joomla erstellen (Inhalt -> Beiträge -> Neuer Beitrag) oder sie gehen über den Shop (J2Store -> Katalog -> Produkte -> Neu). In beiden Fällen landen Sie in der Standard Artikelbearbeitungsmaske, die um ein Tab J2Store erweitert wurde.
In diesem Tab müssen Sie festlegen, ob, und wenn ja, um welche Art Produkt es sich handelt. Sie haben die Wahl zwischen

  • Einfach: Der Gartenstuhl
  • Variable: Der Gartenstuhl in unterschiedlichen Grössen oder Farben
  • Einstellungen: Der Gartenstuhl mit individueller Beschriftung
  • Downloadbar: Der Bauplan für einen Gartenstuhl

Ich erstelle ein einfaches Produkt

J2Store - Artikel als Produkt markieren
J2Store – Artikel als Produkt markieren
Nach dem Speichern erscheint im J2Store unterhalb der Produktinformation ein Bereich in dem Sie Preis, Grösse, Versandbedingungen, Fotos und alle relevaten Dinge eingeben können.

An der Stelle an der der „Kaufen“ Button im Artikeltext erscheinen soll, müssen Sie das folgende Makro einfügen

{j2store}2|cart{/j2store}

Hört sich kompliziert an, ist aber praktisch, denn ausser einem Warenkorb können Sie auch noch andere Parameter einbinden.

J2Store - Makros
J2Store – Makros
Unter J2Store -> Katalog -> Produkte finden sie das Produkt wieder.

Auf der Website erscheint es je nach Art der Einbindung in das Menü als Produkt mit dem „Kaufen“ Button. Das Joomla, das ich hier benutze ist ohne Beispieldaten und mit dem Standard Template.

J2Store - Produkt auf der Website
J2Store – Produkt auf der Website
Das war es!
Sie können den Stuhl jetzt kaufen 🙂
J2Store - Warenkorb
J2Store – Warenkorb

Je nach Konfiguration müssen Sie sich registrieren oder können als Gast einkaufen

J2Store - Bestellprozess
J2Store – Bestellprozess
Sie werden nach Rechnungs- und Lieferadresse, Zahlungs- und Versandbedingungen gefragt und können dann den Kauf abschliessen.

Käufer und Shopbetreiber erhalten eine E-Mail und im Administrationsbereich des J2Store erscheint der Einkauf.

J2Store - Administrationsbereich - Bestellungen
J2Store – Administrationsbereich – Bestellungen
Von hier aus können Sie den Kunden den Auftrag bestätigen.


tl:dr; J2Store ist ein einfach einzurichtender Online-Shop, der sich elegant in Joomla einfügt

Kategorien
Backup Content Management Systeme

Ein Backup in Drupal

Das Thema BACKUP und RESTORE ist wichtig, aber doch eher langweilig.
Nach dem Artikel Backups und Updates in Joomla war ich überrascht über positives Feedback. Gestern stand das Thema wieder zur Debatte, diesmal allerdings in Drupal.

In Drupal gibt es das Modul Backup and Migrate (Sichern und Migrieren) für diese Zwecke

Es sichert Datenbank und Dateien auf zahlreichen Medien wie FTP, Verzeichnis auf dem lokalen Server, Amazon S3 und mit Erweiterungsmodulen auch in Dropbox und weiteren Services.
Mit nodesquirrel.com existiert ein bis zu 5 GB kostenloser, verschlüsselter Backup Service, der von den Entwicklern von Backp and Migrate betrieben wird.

Installation

Installieren Sie das Backup and Migrate Modul über drush oder admin/modules/install.

Backup and Migrate Modul im Modulverzeichnis
Backup and Migrate Modul im Modulverzeichnis

Konfiguration

Unter /admin/config/system/backup_migrate können Sie Ihre Backups konfigurieren.

Backup and Migrate - Administration
Backup and Migrate – Administration
Zunächst erhalte ich einen Hinweis, dass ich noch kein privates Dateiverzeichnis angelegt habe. In Drupal gibt es ein öffentliches Verzeichnis, das sich normalerweise in /sites/default/files befindet und optional ein privates Dateiverzeichnis, das ausserhalb des Dokumentenverzeichnisses des Webservers angelegt werden sollte.

Klicken Sie auf den Link in der Meldung oder rufen Sie /admin/config/media/file-system auf um das private Dateiverzeichnis festzulegen.

Private und öffentliche Dateiverzeichnisse in Drupal
Private und öffentliche Dateiverzeichnisse in Drupal
Wechseln Sie zurück in die Backup and Migrate EInstellungen auf das Tab Einstellungen und dort in die Standardeinstellungen (/admin/config/system/backup_migrate/settings/profile/edit/default). Sie können hier alle Parameter festlegen, wie beispielsweise eine optionale Verschlüsselung durch das AES Modul und die Einstellungen, welche Dateiverzeichnisse und welche Tabellen Sie sichern wollen. In den erweiterten Optionen können Sie eine Checkbox ankreuzen, die Ihnen eine E-Mail sendet.
E-Mail Einstellungen
E-Mail Einstellungen
Das Modul geht davon aus, dass Sie die Datenbank, die Ihr Drupal verwendet, sichern wollen (Quellen – /admin/config/system/backup_migrate/settings/source).

Zu sichernde DB
Zu sichernde DB
Die Ziele sind bereits für den NodeSquirrel.com Service und für das private Serververzeichnis vordefiniert, weitere Ziele können hinzugefügt werden (/admin/config/system/backup_migrate/settings/destination/add).
Backup Ziele
Backup Ziele

Zeitgesteuertes Backup

Unter Zeitpläne können Sie einen neuen Zeitplan erstellen, beispielsweise täglich, abhängig vom eingebauten Drupal Cronjob in das private Verzeichnis (/admin/config/system/backup_migrate/schedule/add)

Zeitgesteuertes Backup
Zeitgesteuertes Backup
Um die Einstellungen zu testen, können Sie nun ein manuelles Backup erstellen (/admin/config/system/backup_migrate). Sie müssten auch eine E-Mail erhalten!
Manuelles Backup
Manuelles Backup
Im Tab gespeicherte Sicherungen (/admin/config/system/backup_migrate/backups) sehen Sie nun ein erstes Backup Paket, dass Sie auch downloaden und in ein anderes Drupal einspielen können. Das ist die Migrate Funktion!

Es erscheint auch der Hinweis, das ich bisher keine offsite Backups habe, d.h. kein Backup ausserhalb meines Servers.

Gespeicherte Sicherungen
Gespeicherte Sicherungen
Je nach Ihren Möglichkeiten können Sie nun FTP, Amazon S3 oder den NodeQuirrel Service einrichten.


tl;dr: Backup and Migrate ist eine sehr komfortable Möglichkeit automatisiert Backups von Ihrer Drupal Site zu erstellen, eine Site zu migrieren und aus einem Backup wiederherzustellen.

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