Willkommen zurück zu unserer Berichterstattung über die Twitter-API. Wenn Sie Twitter verwenden, sind Sie möglicherweise auf einen Freund gestoßen, der Tweets aus dem @ infinite_scream-Bot (siehe oben) sendet. Ich weiß, dass es meistens ein Bot ist, weil er alle zehn Minuten twittert. Die Länge der virtuellen Schreie variiert jedoch, um zu verhindern, dass sie von der API der Twitter-API blockiert werden undokumentiert Beschränkungen. Tweet zu häufig oder wiederholen Sie den gleichen Inhalt, und Ihre Bots werden hoffnungslos blockiert.
Kürzlich bat mich ein Online-Freund, ihnen zu helfen, Code für einen Bot zu schreiben, der sich zwar wiederholen könnte, aber einige intelligente Inhaltsvariationen bietet. Im heutigen Tutorial werde ich darüber schreiben, wie man dies mit der Twitter-API macht.
Im heutigen Tutorial werde ich beschreiben, wie man einen Bot baut, der die Grundlagen schafft:
Wenn Sie jedoch einen Twitter-API-Bot verwenden möchten, um Ihr Produkt oder Ihre Dienstleistung effektiv auf Ihrem eigenen Konto zu bewerben, ohne Ihre Follower zu ärgern, müssen Sie Code schreiben, der das Thema, den Inhalt und die Häufigkeit Ihrer Tweets auf intelligente Weise variiert. Ich werde in zukünftigen Episoden darüber schreiben, wie das geht.
Wenn Sie Fragen oder Anregungen haben, schreiben Sie diese bitte in die nachstehenden Kommentare. Wenn Sie einige meiner anderen Envato Tuts + -Tutorials sehen möchten, besuchen Sie bitte meine Instructor-Seite, insbesondere meine Startup-Serie. Lass uns anfangen.
Für den Bot in der ersten Episode versuche ich, regelmäßig lustige Tweets zu generieren, ohne dabei das Tolle zu stören Twitter Gott des eingeschränkten Zugangs am Himmel.
Der Tweet-Inhalt ist sehr einfach und kann durch Kombination von zuvor geschriebenem Statustext, Hashtags und URLs zufällig erstellt werden.
Der Bot läuft in Yii, einer beliebten PHP-basierten Plattform. Ich halte den unten stehenden Leitfaden für PHP-Entwickler ziemlich einfach. Ich empfehle Ihnen jedoch, Frameworks zu verwenden. In meiner Yii-Serie können Sie mehr lernen.
Im Grunde habe ich zuerst eine App registriert, um meine Twitter-Schlüssel zu erhalten:
Wenn Sie mit dem Erstellen einer App und dem Autorisieren des API-Zugriffs mit Twitter nicht vertraut sind, lesen Sie bitte einige unserer früheren Lernprogramme:
Ich wollte ein System erstellen, in dem mein Freund (oder ein anderer genehmigter Autor) Variationen von Tweets schreiben und für den laufenden Gebrauch in einer Datenbank ablegen kann. Zuerst habe ich eine Datenbankmigration erstellt, um die Tabelle für sie zu erstellen.
Alle meine Tabellen für dieses Projekt haben das Präfix Norm_
. Hier ist die Tweet-Tabelle oder norm_tweet
:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_tweet', ['id' => Schema :: TYPE_PK, 'tweet' => Schema :: TYPE_TEXT. 'NOT NULL', 'media_id' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_tweet');
Als Nächstes erstellte ich mit Yiis Gii-Gerüstsystem ein Modell und CRUD-Dateien für mich. Hier ist das Modell:
Und hier ist die CRUD-Generation:
Daher stellt der gesamte Code automatisch die unten dargestellte Rasteransicht und Bearbeitungsfunktionen bereit.
Im Moment verwende ich nicht die Medien-ID. Dies ist für Bilder, die hochgeladen werden, um in Tweets verwendet zu werden. Ich werde mich wahrscheinlich in der nächsten Episode damit befassen.
Bis jetzt ziemlich unkompliziert, richtig?
Dann wiederhole ich diesen Vorgang für die anderen Modelle. Hier ist die norm_hash
Migration für Hashtags:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_hash', ['id' => Schema :: TYPE_PK, 'tag' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_hash');
Die Idee ist, ein ausgewähltes Hashtag (oder zwei) zufällig in die Tweets aufzunehmen, um den Bot als menschlich erscheinen zu lassen und die Tweets zu variieren.
Hier ist der Hashtag UX:
Ich werde die Yii Gii-Schritte nicht von oben wiederholen, aber ich wiederhole sie für norm_hash
und norm_url
auch.
Hier ist die Datenbankmigration zum Hinzufügen von URLs:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_url', ['id' => Schema :: TYPE_PK, 'url' => Schema :: TYPE_STRING. 'NOT NULL', 'last_used' => Schema :: TYPE_INTEGER. 'NOT NULL', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_url');
Der Bot-Master kann URLs zu unterschiedlichen Zeiten hinzufügen. Es ist wahrscheinlich am besten, dass dieser Bot keine alten URLs verwendet oder diese wiederholt. Das zuletzt verwendeten
und hergestellt in
Mit Unix-Zeitstempeln kann der unten beschriebene Tweeting-Algorithmus entscheiden, wann URLs verwendet werden.
Hier ist die URL-UX-Seite:
Schauen wir uns nun den Spaß-Algorithmus an, um all diese Tabellen zu interessanten Tweets zu kombinieren, die nicht stören Twitters Master Overlord of Restrictions.
Es macht Spaß, einen Bot zu haben, der eine Vielzahl von Inhalten twittert, aber die Vielfalt ist auch hilfreich, um zu verhindern, dass er durch Twitter blockiert wird.
Sie können die Twitter-Tariflimits hier sehen, aber einige Regeln für die Wiederholung von Inhalten scheinen nicht dokumentiert zu sein:
Ich erhielt Anweisungen von meinem Freund, wie er den Algorithmus zum Erstellen von Tweets aus der Datenbank von Tweets, Hashtags und URLs wollte.
Hier ist der Build-Algorithmus, für den wir uns im Moment entschieden haben; es ist leicht zu optimieren. Ich werde es in Teilen beschreiben.
Meines Erachtens ist der unten beschriebene Algorithmus wenig mit der Verwendung von Hashtags und URLs. Wenn Sie eine robustere Vielfalt von Inhalten wünschen, können Sie ihn nach Ihren Wünschen ändern.
Zuerst werden wir Verwenden Sie yii \ db \ Expression;
So wählen Sie einen zufälligen einzelnen Tweet-Text aus der Tabelle aus:
orderBy (neuer Ausdruck ('rand ()')) -> one ();
Dann entscheiden wir, ob Sie einen Hashtag (derzeit 1 von 5 oder 20% der Zeit) verwenden und wie viele (derzeit nur ein) festlegt:
// Entscheide, ob ein Hashtag verwendet werden soll // Wähle eine Zufallszahl zwischen 0 und 4 $ useHash = rand (0,4); // Wenn rand # nicht 0 ist, sondern 1,2,3 oder 4, fügen Sie Hashtag (s) ein. // Für weniger Freq-Verwendung von Hashtags können Sie dies> 2 oder> 3 ändern, wenn ($ useHash> 3) // Also werden wir jetzt entscheiden, welche und wie viele Hash-Tags // der Ersteller beschlossen hat, nur einen Hashtag zu verwenden. $ numHash = 1; // rand (1,3); // diesen Rand # $ numHash zufällig aus unserer Liste auswählen $ hash = NormHash :: find () -> orderBy (neuer Ausdruck ('rand ()')) -> one (); else // keine Hashtags verwenden $ hash = false;
Dann entscheiden wir, ob eine URL zur Verfügung steht. URLs müssen weniger als eine Woche alt sein und können nur alle 72 Stunden (3 Tage) verwendet werden. Eine neue URL ist daher möglicherweise nur einmal, zweimal oder möglicherweise dreimal verfügbar, bevor sie abläuft.
// Verwenden Sie eine URL nur, wenn sie weniger als eine Woche alt ist. $ url_weekago = time () - 7 * 24 * 3600; $ url_3daysago = time () - 3 * 24 * 3600; // Verwenden Sie eine URL nur, wenn sie in den letzten 72 Stunden nicht veröffentlicht wurde. $ url = NormUrl :: find () -> where ('created_at>'. $ url_weekago) -> andWhere ('last_used<'.$url_3daysago) // handles unused zero case ->orderBy (['id' => SORT_DESC]) -> one ();
Abschließend erstellen wir den Tweet basierend auf den ausgewählten Daten (verfügbare URLs werden nur einmal in viermal oder 25% Chance hinzugefügt):
$ content = $ txt-> tweet; if ($ hash! == false) $ content. = '#'. $ hash-> tag; // Nur URL 1/4 der Zeit hinzufügen, wenn (! is_null ($ url) && rand (1,4) == 1) $ content. = ". $ url-> url; $ url-> last_used = time (); $ url-> update (); return $ content;
Mit Yii können Sie die Controller von cron aus aufrufen. Also füge ich meiner /console/DaemonController.php in crontab einen Aufruf hinzu.
$ sudo crontab -l
So sind meine Aufgaben geplant:
# mh dom mon dow-Befehl * / 3 * * * * / var / www / bot / yii-Daemon / häufig * / 15 * * * * / var / www / bot / yii-Daemon / Viertel 0 * * * * / var / www / bot / yii daemon / stündlich 15 1 * * * / var / www / bot / yii daemon / über Nacht 15 3 * * 5 / var / www / bot / yii daemon / wöchentlich
Jede Stunde, Daemon / stündlich
in /console/DaemonController.php wird angefordert. Unsere Bot-App entscheidet nur, ob alle vier Stunden ein Tweet gesendet werden soll.
Zuerst wirst du sehen, dass ich eine habe NormLog
Tabelle, die ich oben nicht beschrieben habe, aber diese verfolgt die gesamte Ausgabe und wann Tweets erstellt wurden. Mein Freund wollte also nicht mehr als einmal am Tag twittern.
öffentliche Funktion actionHourly () // stündlich $ current_hour = date ('G'); if ($ current_hour% 4) // alle vier Stunden echo "Tweetenplan überprüfen…"; $ dayAgo = Zeit () - 24 * 3600; $ nl = \ frontend \ models \ NormLog :: find () -> orderBy (['id' => SORT_DESC]) -> one (); echo 'created_at:'. $ nl-> id. ". $ nl-> created_at. '...'; echo 'dayago:'. $ dayAgo. '...'; if ($ nl-> created_at<$dayAgo) // okay to maybe tweet…
Wir wollten nicht, dass die Anhänger unseres Bots durch Hochfrequenz-Tweets verärgert werden.
Dann wählen wir eine Zahl aus, im Grunde genommen sechsmal am Tag (alle vier Stunden), und twittern, wenn die Zahl 6 ist (oder eine Eins unter 12 Chancen)..
// alle vier Stunden, wenn 6 von 1-12 ausgewählt wird, twittern wir // 1 in 12 Chance 12x in zwei Tagen $ r = rand (1,12); if ($ r == 6) \ frontend \ models \ NormTweet :: deliver (); Echo "Tweet, 6 wurde ausgewählt ..."; else echo "nicht twittern, 1 in 12 # nicht ausgewählt ..."; else // Nie zweimal in 24 Stunden twittern Echo 'nicht twittern, noch nicht 24 Stunden ...'; Echo '... hat es geschafft zu Ende ...!'; if ($ current_hour% 6) // alle sechs Stunden
Hier ist die NormTweet :: deliver ()
Methode, die vom Daemon aufgerufen wird, um den Tweet zu posten:
öffentliche statische Funktion deliver () // Update veröffentlichen // Konstrukt $ content = NormTweet :: build (); // Tweete es mit Params für die Norm acct $ connection = new TwitterOAuth (Yii :: $ app-> params ['norm'] ['consumer_key']), Yii :: $ app-> params ['norm'] ['consumer_secret '], Yii :: $ app-> params [' norm '] [' access_token '], Yii :: $ app-> params [' norm '] [' access_token_secret ']); $ postit = $ connection-> post ("statuses / update", ["status" => $ content]); // Speichern Sie es im Protokoll. $ nl = new NormLog (); $ nl-> Tweet = $ content; $ nl-> save ();
Die Twitter-Anwendungsschlüssel des Kontos werden in /bot/frontend/config/params-local.php gespeichert und werden in der von mir verwendeten bot.ini-Datei konfiguriert:
$ more params-local.php ['consumer_key' => $ config ['norm_consumer_key'], 'consumer_secret' => $ config ['norm_consumer_secret'], 'access_token' => $ config ['norm_access_token'], 'access_token_secret' => $ config ['norm_access_token_secret '],' user_id '=> $ config [' norm_user_id '],],];
Bots sind nicht einfach, aber sie sind es Spaß!
Hier sind die Ergebnisse unseres Bots:
War nur Spaß! Das ist eine der redaktionellen Göttinnen, Tom McFarlin. AI-Skripte sind noch nicht in der Lage, seine "Einsichten" zu ersetzen, aber Envato Tuts + hat mich beauftragt, daran zu arbeiten.
Hier ist der eigentliche Bot, der meinen Freund und seine Anhänger daran erinnern soll, dass Amerikas neue Politik nicht gerade normal ist. Ich stelle mir vor, wie auch immer Ihre Ansichten damit übereinstimmen würden.
Ich hoffe, dass dir diese Episode gefallen hat.
Als Nächstes werde ich eine stärker marketingorientierte Plattform einrichten, mit der Sie die Twitter-API verwenden können, um Ihr Startup, Ihre Services und Ihr Unternehmen zu bewerben, ohne als Bot gekennzeichnet und blockiert zu werden.
Wenn Sie Fragen oder Anregungen zu diesem Tutorial haben, veröffentlichen Sie diese bitte in den Kommentaren. Wenn Sie mit meinen zukünftigen Envato Tuts + -Tutorials und anderen Serien mithalten möchten, besuchen Sie bitte meine Instructor-Seite oder folgen Sie @reifman.