Monatsarchive: Oktober 2012

Amazon-ECS-PHP-Library

Auf GitHub habe ich heute eine Lösung gefunden um mit Hilfe von PHP mit dem Amazon Product Advertising API zu kommunizieren.

Die Registrierung für einen API-Schlüssel war etwas seltsam – ich musste mich, obwohl ich bereits einen Partnernet-Account hatte, bei den Amazon Web Services registrieren. Dann habe ich zwar direkt einen API-Key inklusive Secret bekommen (meine Associate-ID hatte ich ja bereits), aber irgendwie gingen die Requests noch nicht durch.

Nach ein paar erneuten Klicks im Partnernet, einer Beschreibung wo und warum ich die Product Advertising API nutzen möchte und einem Captcha, ging plötzlich auch der Zugriff auf diese. Seltsam – aber nun läuft alles! Nun kann ich alles testen und meine Homepage mit automatischen Affiliate-Links füllen. Ich habe mir noch kein genaues Konzept überlegt. Falls das soweit ist – ihr wisst wo ihr darüber lesen könnt!

Magento: Compiler deaktivieren

Da ich noch relativ frisch im Thema Magento bin, habe ich mich gewundert woher das Verzeichnis „include“ kommt und warum es tausende von Klassen enthält die es bereits wo anders gibt. Schuld ist der sog. Compiler von Magento.

Der Compiler soll Magento etwas beschleunigen. Dazu spart er sich das Durchsuchen von Ordnern nach entsprechenden Klassen und sucht die Klassen in include/src. Für eine Entwicklungsumgebung ist das natürlich kontraproduktiv.

Um den Compiler zu deaktivieren kann man die compiler.php im Ordner Shell nutzen.

Detailliertere Informationen zum Compiler Mode gibt es hier.

mySQL: ERROR 1062 (23000) at line n: Duplicate entry ‚x‘ for key ‚y‘

Heute hatte ich ein Problem mit dem Einspielen eines mySQLDumps auf einem anderen Server. Ich bekam ständig die Meldung, dass mein Dump einen Doppelten Schlüssel für Key XY enthält. Die Lösung dafür ist relativ simpel (wenn auch nicht gerade sicher): Man erstellt den Dump einfach mit –insert-ignore. Dann werden eventuelle doppelte Zeilen einfach ignoriert.

Gewinnspiele auf Facebook

Nachdem ich auf meiner Seite immer mehr „Likes“ sammeln konnte, habe ich mir überlegt wie man diese Zahl wohl am einfachsten steigert – eine der beliebtesten Antworten auf diese Frage ist wohl: Mach einfach ein Gewinnspiel! Doch was genau ist laut Facebook eigentlich erlaubt und was verboten?

So ist es z.B. verboten das Gewinnspiel an Facebook-Funktionen zu knüpfen. Das heißt man darf die Leute nicht dazu auffordern die Seite zu teilen, den Beitrag zu „liken“ oder zu kommentieren. Von dieser Art der Gewinnspiele sieht man allerdings sehr viele! Eigentlich schade – immerhin ist genau das der einfachste Weg die Zahlen in die Höhe zu treiben.

Weiterhin ist es verboten den Gewinner anhand von Facebook-Kriterien zu ermitteln. So darf z.B. nicht das Foto mit den meisten Likes oder Kommentaren gewinnen. Ein anderes Beispiel für ein verbotenes Gewinnspiel: „Ab 2.000 Fans verlosen wir ein iPad“.

Der sicher größte Knackpunkt für kleinere Seiten ist, dass das Gewinnspiel in einer App stattfinden MUSS.

Wer dennoch eine Gewinnspiel-App erstellen möchte kann auf Dienste wie Sweepstake oder Halalati zurückgreifen. Es gibt also noch Wege ein Gewinnspiel durchzuführen – wenn auch nicht umsonst.

Die eigene Webseite optimieren #5: Social Media

Auf seitwert.de habe ich eine weitere Analyse meiner Seite durchgeführt. Der Seitwert beträgt aktuell 14,13 von 100 Punkten – wirklich ein schwaches Ergebnis. Dort ist mir weiterhin der Punkt Social-Media aufgefallen. Dort erreiche ganze null Punkte – WOW! Das liegt wohl daran, dass meine Links bei Facebook etc. nicht besonders oft geteilt werden. Entweder ich habe also keine interessanten Inhalte, zu wenig Besucher, oder meine Social-Media-Integration ist einfach nur schlecht.

Nach einem kurzen Review auf meiner Seite habe ich mich schnell erinnert: Damals habe ich nur fix das Social-Media-Privacy-Plugin von Heise auf der Startseite implementiert. Dort taucht zwar jeder Artikel, Download, Tutorial, Review, Foto einmal auf, rutscht aber schnell nach unten durch und dann wird es schwer es im Nachhinein zu „liken“ oder zu teilen.

Gedacht getan – heute Abend habe ich mich hingesetzt und auf allen möglichen Unterseiten die Social-Media-Links integriert. Ich bin gespannt wie sich das in Zukunft auf die Seite auswirken wird. Generell gilt weiterhin: Nicht um Likes betteln sondern einfach Inhalte schaffen den andere mögen und gerne lesen. Denn nur so kommen die Besucher wieder!

Fuzzy-Logik in PHP – „Meinten Sie: …?“

Wer kennt die Korrekturen von Google und anderen Suchmaschinen nicht? Sie wissen sofort was man meinen könnte wenn man sich einmal vertippt hat. Oder wie funktioniert die Rechtschreibkorrektur in Office-Anwendungen? In diesem Artikel möchte ich auf die Funktionen dahinter eingehen – speziell in PHP.

Uns stehen die folgenden Funktionen zur Verfügung:

In mySQL gibt es die Funktion SOUNDEX() / das Schlüsselwort SOUNDS LIKE. Diese funktioniert leider etwas anders als die Funktion in PHP und so sind die resultierenden Werte nicht direkt vergleichbar. Die PHP-Funktion liefert immer eine 4-Stellige Zeichenkette zurück während mySQL für längere Strings auch eine längere Zeichenkette liefert.

Weiterhin gibt es in mySQL die Möglichkeit auf verschiedene Volltextsuch-Funktionen zurück zu greifen. In diesem Zusammenhang sei MATCH(…) AGAINST(…) genannt. Das Ergebnis dieser Funktion kann gut als Grundlage für einen Vergleich mit similar_text genutzt werden.

Da die meisten Funktionen auf die Englische Sprache optimiert sind, sollte für den Deutschen Raum eine andere Logik eingesetzt werden. Dabei hilft die Suche nach „Kölner Phonetik“ – eine Implementierung dieser Funktion findet man bereits auf PHP.net in den Kommentaren zu soundex. Zu der Funktion ist zu sagen, dass diese nicht zu hundert Prozent korrekt ist und einige kleine Änderungen notwendig sind um sie an die Definition anzupassen. Weiterhin gibt es eine Implementierung auf GitHub (über dessen Qualität ich allerdings nichts sagen kann).

Zu den Funktionen sollte man allerdings sagen, dass diese verdammt hohe Kosten verursachen und nicht besonders performant sind. Der Einsatz sollte daher gut durchdacht sein. Alternativ könnte man zu bestimmten Wörtern den Soundex beispielsweise mit in die Datenbank speichern anstatt in bei jedem Query neu zu berechnen.

Wie man die ganze Logik erweitern kann um gewissen Unschärfen zu entfernen beschreibt Adam Charnock in seinem Blog. Weitere Möglichkeiten sind der Einsatz von Pspell (bis PHP 5.3) oder Enchant.

Für die ganz großen Aufgaben und Projekte kommt sicher Apache Solr in Frage (für das ebenfalls eine PHP Extension verfügbar ist). Ein guter Einstieg in die Thematik ist sicher der Artikel „Enterprise Search with PHP and Apache Solr“ von IBM. Ein weiteren interessanten Artikel zum Thema habe ich auf PHP Gansta gefunden. In diesem Artikel wird außerdem auf Apache Lucene eingegangen (welches auch im Zend-Framework enthalten ist).

Und noch etwas weiter weg vom Thema: Hier gibt es noch ein schönes Dokument zum Thema mySQL-Performance und Volltextsuche.