phpBB automatische Posts mit PHP
Für mein aktuelles Projekt habe ich ein PHP Skript erstellt, dass automatische Posts in einem phpBB Forum erstellt. Mit diesem Skript kann man zum einen sein phpBB Forum automatisieren oder aber mit einer anderen Webseite kombinieren. So kann man zum Beispiel WordPress Beiträge ins Forum übernehmen oder aus einer PHP Webseite wichtige neue Informationen übernehmen.
phpBB automatische Posts mit PHP
In meinem PHP Formel 1 Manager wird jede Woche ein Rennen berechnet für das Spieler trainieren können und Einstellungen machen. Im angeschlossenen phpBB Forum wird zur laufenden Saison heiß diskutiert. Ein nettes neues Feature ist nun, dass die Ergebnisse der Qualifikation und des Rennens der einzelnen Ligen automatisch im richtigen Forum als neuer Beitrag erstellt werden. Benutzer können dort wiederum zu diesem Kommentieren und das Rennen analysieren.
submit_post
phpBB bietet zum erstellen neuer Themen beziehungsweise Posts die Funktion submit_post an. In der Dokumentation dazu erhält man nähere Informationen was diese Funktion alles kann und welche Parameter man benötigt. Die Verwendung ist recht einfach, solange man die benötigten Variablen alle zur Verfügung hat.
Das vollständige Skript sieht wie folgt aus:
global $phpbb_root_path, $phpbb_autopost_username, $phpbb_autopost_password; global $phpbb_container; global $phpEx, $user, $auth, $cache, $db, $config, $template, $table_prefix; global $request; global $phpbb_dispatcher; global $symfony_request; global $phpbb_filesystem; global $phpbb_extension_manager; if($phpbb_root_path != '') //path comes from configuration { define('IN_PHPBB', true); $phpEx = substr(strrchr(__FILE__, '.'), 1); include_once($phpbb_root_path . 'common.'.$phpEx); include_once($phpbb_root_path . 'includes/functions_user.'.$phpEx); if($request) $request->enable_super_globals(); //for phpbb >= 3.1.x include_once($phpbb_root_path . 'includes/functions_posting.'.$phpEx); $my_subject = $subject; $my_text = $text; $poll = $uid = $bitfield = $options = ""; generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false); generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true); $user->session_begin(); $auth->acl($user->data); $user->setup(); //auto login user $username_phpbb = $phpbb_autopost_username; $password_phpbb = $phpbb_autopost_password; $auth->login($username_phpbb, $password_phpbb, true); $data = array( 'forum_id' => $forum_id, 'icon_id' => false, 'enable_bbcode' => true, 'enable_smilies' => true, 'enable_urls' => false, 'enable_sig' => true, 'message' => $my_text, 'message_md5' => md5($my_text), 'bbcode_bitfield' => $bitfield, 'bbcode_uid' => $uid, 'post_edit_locked' => 0, 'topic_title' => $my_subject, 'notify_set' => false, 'notify' => false, 'post_time' => 0, 'forum_name' => '', 'enable_indexing' => true, 'topic_first_poster_name' => "Admin", 'force_approved_state' => true, //3.1 'force_visibility' => true, //3.0 ); submit_post('post', $my_subject, 'admin', POST_NORMAL, $poll, $data); }
Die Variable $phpbb_root_path ist eine globale Einstellung in der man den Pfad zur phpBB Installation angibt. Sollte dort nichts ausgefüllt sein, dann wird kein Code ausgeführt. Man kann mein Spiel auch komplett ohne Forum verwenden, oder mit einer alternativen Forensoftware. Includen muss man folgende phpBB PHP Dateien:
- common.php
- includes/functions_user.php
- includes/functions_posting.php
Neben den Standardinclude benötigt man auch noch alles für die Benutzer und das erstellen von Posts. In den Variablen $my_subject und $my_text definiert man den Titel des neuen Posts und dessen Inhalt. Beim Text ist zu beachten, dass er dem Forum üblichen Format entspricht. Für das Stylen verwendet man statt HTML BBCode.
Den neuen Post muss ein Benutzer erstellen. Das ist normalerweise der aktuell angemeldete Benutzer. Da das Skript aber über einen Cron als PHP Skript aufgerufen wird ist üblicherweise kein Benutzer angemeldet. Deshalb müssen wir im Skript einen Benutzer automatisch anmelden. Das funktioniert mit der login Funktion. Übergeben muss man dieser Benutzername und Passwort ($phpbb_autopost_username, $phpbb_autopost_password). Es macht Sinn, dort den Admin Benutzer anzugeben, ansonsten werden zwar die Posts erstellt, aber benötigen danach noch eine Freischaltung. Über den Admin erstellte Posts sind sofort sichtbar und freigegeben!
Zuletzt benötigt man für automatische Posts mit phpBB noch ein Array mit Einstellungen. Besonders wichtig ist dabei die Angabe der $forum_id, unter diesem wird der Post erstellt. Die ID des Forums bekommt man aus der Datenbank oder aus der URL im Administrationsbereich von phpBB wie das folgende Bild verdeutlicht (man muss zuerst auf das Forum – in meinem Fall Test klicken)…
Besonders wichtig sind die Einstellungen force_approved_state (3.0) beziehungsweise force_visibility (3.1) damit der Post direkt ohne Freischaltung eines Moderators sichtbar ist.
Fazit
Mit nur wenig Aufwand kann man automatische Posts in phpBB erstellen. Das hat den Vorteil, dass man ohne großen Aufwand neuen Inhalt erstellt auf den die Benutzer kommentieren können. In meinem Fall sind das pro Woche 4 Posts (Ergebnisse der Qualifikation und des Rennens und jeweils in Deutsch und Englisch). Die Benutzer freuen sich über diesen Mehrwert an Information.
Was denkt ihr über automatisches erstellen von Posts? Wofür würdet ihr das Skript verwenden?
Ich betreibe einen PHPBB 3.3.10 Forum. Ist es möglich, dieses Skript als einbaufähige Extension zu bekommen? Leider sind meine PHP-Kenntnisse zu rudimentär, um die Implementierung selbst vorzunehmen. Mit geht es darum, Posts vorzubereiten, die zeitlich passend zur Veröffentlichung eines Youtube-Videos im Forum gepostet werden. Also beispielsweise Datum, Uhrzeit und Text voreinzustellen und den Post quasi bis zu dem Zeitpunkt „on hold“ oder unsichtbar zu schalten und automatisch dann zu veröffentlichen.
Sowas könnte man programmieren ja.