Plugin für den Suchagenten

Für den Suchagenten im AnzeigenChef können eigene Plugins erstellt werden. Du kannst diese selbst nutzen oder in unserem öffentlichen Marktplatz zu Verfügung stellen. Für die Entwicklung benötigst Du mindestens Qt 5.9.1 oder höher. Versuche stets die Framework Version zu nutzen, mit der auch das Programm gebaut wurde, diese kannst Du unter “Hilfe” -> “Über AnzeigenChef” herausfinden.

Ein Beispielplugin findest Du auf GitHub

Interface

Du benötigst hierzu lediglich ein Interface, an dem sich Deine öffentlichen Funktionen orientieren.

#ifndef SEARCHAGENTINTERFACE_H
#define SEARCHAGENTINTERFACE_H

#include <QtCore>

enum PriceType { 
  Negotiating = 1, 
  FixPrice = 0, 
  GiveAway = 2, 
  Trade = 3, 
  BestPrice = 4
}

class SearchResult
{
public:
    QString AdId; // max length 30
    QString AdTitle; // max length 255
    QString AdDescription;
    QString AdSeoUrl; // max length 255
    QDateTime AdStart;
    QDateTime AdEnd;
    QString AdImageUrl; // max length 255
    QString AdDistance; // max length 255, postalcode and city or distance
    int AdPrice = 0;
    PriceType AdPriceType = PriceType::Negotiating;
};

class SearchAgentInterface
{
public:
    virtual ~SearchAgentInterface() {}
    virtual QList<SearchResult> Search(const QUrl& rUrl, int rReadpages) = 0;
    virtual QString GetPlatformName() = 0;
    virtual QString GetPlatformColor() = 0;
    virtual QColor GetPlatformHash() = 0;
    virtual QString GetLastError() = 0;
    virtual QString GetCustomerHelpMessage() = 0;
    virtual QString GetPlatformLetters() = 0;
    virtual bool SendQuestionToAdOwner(const QString &accountUsername, const QString &accountPassword, const QString &myName, const QString &myPhone, const QString &advertId) = 0;
};

#define SearchAgentInterface_iid "MG.AnzeigenChef.SearchAgentInterface"

Q_DECLARE_INTERFACE(SearchAgentInterface, SearchAgentInterface_iid)

#endif // SEARCHAGENTINTERFACE_H

Wie Du die Daten einliest und verarbeitest, bleibt Dir überlassen. Natürlich solltest Du Dich um ein ordentliches Error-Handling kümmern.

Das Interface besteht zum einen aus der “SearchResult” Klasse, die Details über das Suchergebnis bereithält sowie mehreren informativen Funktionen, die der Suchagent benötigt.

Klasse SearchResult

QString AdId: Eine eindeutige Anzeigennummer, die zur Aktualisierung genutzt wird. Zusätzlich wird diese beim senden von Anfragen und verhindern von Duplikaten genutzt, max. 30 Zeichen.

QString AdTitle
Der Titel der Anzeige, max. 255 Zeichen.

QString AdDescription
Die Beschreibung der Anzeige, möglichst eine Kurzbeschreibung.

QString AdSeoUrl
Die vollständige URL zur Anzeige, max. 255 Zeichen.

QDateTime AdStart
Datum der Veröffentlichung.

QDateTime AdEnd
Datum, an dem die Anzeige ausläuft.

QString AdImageUrl
Vollständige URL zum Bild, max. 255 Zeichen.

QString AdDistance: Freier Text für den Standort, z.B. PLZ und Ort, max. 255 Zeichen.

int AdPrice
Preis der Anzeige.

PriceType AdPriceType
Anzeigeart, kann Negotiating (VB), FixPrice (Festpreis), GiveAway (verschenken), Trade (tauschen) oder BestPrice (Bester Preis) sein.

Interface Funktionen

Funktion “Search”

Diese Funktion wird bei jedem Suchvorgang ausgeführt. Das Ergebnis ist eine QList<SearchResult>, in der alle Suchergebnisse enthalten sind. Als Parameter übergibt das Programm:

Url: Die zu durchsuchende URL
rReadpages: Die Anzahl der zu durchsuchenden Seiten. Das Programm fordert jede Stunde eine größere Einlesung um abzugleichen, welche Anzeigen noch aktiv sind. Sollte die Anzahl größer als 1 sein solltest Du eine entsprechende Blätterfunktion in Deinem Agenten verwenden.

Funktion “GetPlatformName”

Hier gibst Du zurück, wie Dein Suchagent heißt bzw. für welche Plattform dieser ist.

Funktion “GetPlatformHash”

Gebe hier eine eindeutige UID / GUID als QString zurück, die Dein Plugin identifiziert. Verwende keine Namen, die evtl. von einem anderen Plugin verwendet werden könnten.

Funktion GetPlatformColor

Welche Farbe soll der runde Kreis um die Plattformbuchstaben (GetPlatformLetters) haben? Den Wert gibst Du als QColor zurück.

Funktion “GetLastError”

Sollte Dein Plugin einen Fehler erzeugen, so wird diese Funktion aufgerufen, um dem Nutzer die entsprechende Meldung anzuzeigen.

Funktion “GetCustomerHelpMessage”

Hier kannst Du einen Hilfetext zurückgeben, der dem Nutzer beim anlegen des Suchagenten angezeigt wird.

Funktion “GetPlatformLetters”

Gebe hier max. 2 Buchstaben für Dein Plugin zurück, die dem Nutzer bei der Anzeige als Kreis dargestellt werden. Dies soll bei der Übersicht helfen, da ggf. mehrere Suchagenten aktiv sein können.

Funktion “SendQuestionToAdOwner”

– noch nicht implementiert –

Deployment

Du solltest Dein Plugin für Windows (dll), Mac (dylib) und Linux (so) zu Verfügung stellen. Falls Du keinen Mac hast, können wir gerne die Kompilierung für Dich übernehmen. Alle Plugins müssen im Release gebaut werden.

Anbei ein Beispiel für die .pro

QT       += core network

TARGET = QuokaAgent
TEMPLATE = lib
CONFIG += plugin

# This Part is only for debugging on our development
CONFIG(release, debug|release) {
    macx{
        DESTDIR = $$PWD/../build/release/macos
    }

    win32{
        DESTDIR = $$PWD\\..\\build\\release\\windows
    }

    linux{
        DESTDIR = $$PWD/../build/release/linux
    }
}

CONFIG(debug, debug|release) {
    macx{
        DESTDIR = $$PWD/../build/debug/macos
    }

    win32{
        DESTDIR = $$PWD\\..\\build\\debug\\windows
    }

    linux{
        DESTDIR = $$PWD/../build/debug/linux
    }
}


DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
        quokaagentplugin.cpp

HEADERS += \
        quokaagentplugin.h \
        searchagentinterface.h

DISTFILES += QuokaAgent.json

Die fertigen Plugins für den Suchagenten werden im Datenverzeichnis unter plugins/agents gespeichert.