[Download] – Datenbankdateien, Hashtagprojekt (Instagram)

Nach einigen internen Diskussionen entschieden wir uns zur Freigabe der Rohdatensätze des Hashtagprojektes.
Die Daten liegen in der Dropbox und wurden von mir jeweils in die Formate SQL und CSV mit Hilfe des SQLiteStudio exportiert.
Diese haben die folgende Gliederung:

Erfassungszeitraum: Februar – 2017
Anzahl-Datensätze: 28016137
Dateigröße: ~2.3 GB (SQL) / ~1.2GB (CSV), ~438(ZIP)
Downloadlink (Dropbox): http://bit.ly/2lWWfO3

Erfassungszeitraum: Januar – 2017
Anzahl-Datensätze: 37594614
Dateigröße: ~3.16 GB (SQL) / ~1.2GB (CSV), ~583 (ZIP)
Downloadlink (Dropbox): http://bit.ly/2jq6FpO

Erfassungszeitraum: Dezember – 2016
Anzahl-Datensätze: 26564618
Dateigröße: ~2.2 GB (SQL) / 852MB (CSV), ~288.53MB (ZIP)
Downloadlink (Dropbox): http://bit.ly/2jEStaR

Erfassungszeitraum: November – 2016
Anzahl-Datensätze: 7311964
Dateigröße: ~613 MB (SQL) / 233MB (CSV), ~82.11MB (ZIP)
Downloadlink (Dropbox): http://bit.ly/2k5QQBF

Tagliste, Datenbank
Das Volumen umfasst ca. 3Mio Einträge (SQLite) und beschreibt alle erfassten Tags. Ausgeklammert sind hier die Erfassungszeiträume und die Häufungsentwicklungen.
Downloadlink: http://bit.ly/2mSxJ1p

[Hinweise]
Die Tabellen haben die Spalten „tag“, „haeufung“ und „datum“ und die SQL-Dumps beinhalten KEINE Tabellenerstellungsanweisungen. Es muss also geprüft werden, ob bei einem Import hier eine geeignete Tabelle manuell angelegt werden soll.
Bitte hier auch beachten, dass wir hier keinerlei Hinweise zur Datenverwaltung oder zur Dateninterpretation liefern werden: der Austausch und diese Dienstleistung ist primär unseren Kund_innen, Geschäftsfreund_innen und Geschäftspartner_innen vorbehalten.
Die monatlichen Updates werden zukünftig auf diesem Artikel veröffentlicht.

[Updatenotiz] Instagrambot – 2.0 (Beta)

Der „Bot“ ist nun komplett auf SQLite umgestellt und die nächste Versionsnummer wird folgende (neue) Funktionen umfassen:

(1) Projektmanagement
– kategoriebasiertes Liken je Account, bezogen auf zielgruppenorientierte Themenwelten
– kategoriebasiertes Liken je Account, bezogen auf Locations

(2) Locations
– Anbindung einer Locationresearchfunktion in Verbindung mit der Facebook-Places-API
– Locationgewichtung nach Posts, Themenwelten und Beliebtheit

(3) Externe Datenquellen
– Anbindung der Hashtagdatenbank zwecks Querprüfung und Tagrecherchen

(4) Monitoring, Erfolgskontrollen
– Dauerhaftes Speichern der Grunddaten (=> Abos, Abonnenten, Posts als Zahl)
– Ergebnisdarstellungen in Form von Diagrammen und PDF-Exports

Interessante WordPressplugins [25.02.2017]

Im Zuge aktueller Arbeiten an unseren Blogs wurden die Projekte um die folgenden Plugins erweitert.

StopBadBots
Dieses Plugin liefert eine erstaunlich simple Lösung für das Blockieren unerwünschter Bots. In der Grundinstallation wird eine Datenbank mit etwas über 1000 Bots mitgeliefert und hier befinden sich bspw. die bekannten SEO-Datendienstleister und Nischensuchmaschinen. Performanceprobleme sind derzeit nicht erkennbar.

Tracking Code
Dieses Plugin erlaubt eine elegantere Einbindung der Trackingcodes in den Header oder Footer der Seite. Ein manuelles Bearbeiten der footer.php erübrigt sich.

WP referrer spam blacklist
Dieses Plugin widmet sich der Abwehr der bekannten Referrer-Spammer. Die aktive Liste befindet sich in den FAQ des Anbieters.

Broken Link Checker
Dieses Plugin prüft automatisiert und regelmäßig die Existenz der ausgehenden Links ab und informiert per Mail oder Dashboard über eventuelle Probleme wie bspw. „nicht gefunden“, „tot“ oder „nicht ereichbar“.

SSL Insecure Content Fixer
Das Plugin bereinigt diverse Fehler bei der Umstellung von http auf https.

Recherchen via Locations mit Hilfe der Instagram-API

Für den Zugriff auf die gewünschten Datensätze liefert Instagram genau einen interessanten Einstiegspunkt:

Location – ID
https://api.instagram.com/v1/locations/{location-id}/media/recent?access_token=ACCESS-TOKEN

Nun stellte ich hier fest, dass die Location-ID via Recherche auf Basis der GeoCodes identifizierbar ist. Das lässt sich einfacher lösen und der Weg sieht so aus:

(1) Facebook-Account organisieren
(2) Zugriffstoken für FB organisieren
siehe: How to get a Facebook Token
(3) Abfrage der Facebook-Places API
Beispiel:
https://graph.facebook.com/search?q=[ort]&type=place&access_token=[deintoken]
(3.1) Auslesen und Interpretieren
Wichtige und interessante Variablen sind „name“ und „id“. Beide müssen für die weitere Verarbeitung entsprechend gespeichert werden. Die Ergebnisse werden im JSON-Format ausgegeben und sind entsprechend einfach auswertbar.

Die Erkenntnisse werden zeitnah in den Instagram-Bot übertragen und besagte Anwendung wird um eine Funktion erweitert, welche:
(a) Locations recherchiert
(b) Locations gewichtet
– nach Zeitstempel der Posts
– nach Hashtags

Hashtagprojekt – Datenbankabfragen

Mit Bekanntgabe des Projektes und Freigabe der Rohdatenpakete erreichen mich immer wieder Anfragen zu möglichen Queries. Die nachfolgenden Beispiele bilden einen Teil unserer Dateninterpretationssoftware ab.

[Prüfzeitpunkte]
select datum from example.tags group by datum;
Funktion: Ausgabe aller Prüfzeitpunkte.

[Häufungsauflistungen]
select haeufung from example.tags group by haeufung;
Funktion: Ausgabe aller erfassten Häufungen, unabhängig von Tag und Erfassungsdatum

[komplette Tagauflistung(en)]
(1) Pauschale Auflistung
select tag from example.tags group by tag;
Funktion: Auflistung aller erfassten Tags
(2) Auflistung inkl. Häufungen
select tag, haeufung from example.tags group by tag;
Funktion: Auflistung aller erfassten Tags inkl. deren Häufungen
(3) Auflistung inkl. Häufungen, nach Häufungsfilter
(3.1) absteigend
select tag, haeufung from example.tags where haeufung >=1000 group by tag order by haeufung desc;
Funktion: Auflistung aller Tags inkl. deren Häufungen, ab einer Mindesthäufung (absteigend nach Häufung)
(3.2) aufsteigend
select tag, haeufung from example.tags where haeufung >=1000 group by tag order by haeufung asc;
Funktion: Auflistung aller Tags inkl. deren Häufungen, ab einer Mindesthäufung (aufsteigend nach Häufung)

[Recherche(n)]
(1) Wortrecherche
select tag from example.tags where tag like 'leipzig%' group by tag;
Funktion: Ausgabe aller Tags, wo das gesuchte Wort am Anfang der Ergebnisse steht.
select tag from example.tags where tag like '%leipzig' group by tag;
Funktion: Ausgabe aller Tags, wo das gesuchte Wort am Ende der Ergebnisse steht.
(1.2) Wortrecherche mit Ausgabe der Häufungen
select tag, haeufung from example.tags where tag like 'leipzig%' group by tag;
select tag, haeufung from example.tags where tag like '%leipzig' group by tag;
(1.3) Wortrecherche nach Datum
select tag from example.tags where tag like 'leipzig%' and datum = '31.12.2016' group by tag;
select tag from example.tags where tag like '%leipzig' and datum = '31.12.2016' group by tag;
Bei beiden Ausgabebefehlen muss (!) im Vorfeld abgeklärt werden, ob in der Datenbank Einträge zum gesuchten Datum existieren.
(1.4) Wortrecherche nach Häufung
select tag, haeufung from example.tags where tag like 'kinder%' and haeufung > 1000 group by tag;
(1.5) Wortrecherche nach Häufung mit Datumsauflistung(en)
select tag, haeufung, datum from example.tags where tag = 'zimmer' and haeufung > 1000;

(2) Gruppenrecherche(n)
select tag from example.tags where tag like 'kind%' and tag like '%garten%' group by tag;
Funktion: Ausgabe aller Tags mit den Wortbestandteilen „Kind“ (Position: Anfang) und „Garten“ (Position: Egal)
select tag from example.tags where tag like 'kind%' and tag like '%garten' group by tag;
Funktion: Ausgabe aller Tags mit den Wortbestandteilen „Kind“ (Position: Anfang) und „Garten“ (Position: Ende)

[Erklärungen und Hinweise]
Die genannten Beispiele lassen sich im SQLite-Studio via Hauptmenü [Werkzeuge]=>[SQL-Editor] benutzen und wir nutzen einen Teil der o.g. Liste für die Features des eigenen Rechercheclients und Instagrambot. Durch die große Datenansammlung (freigegeben: ~70 Mio Datensätze) können die Zeiträume zwischen Abfrage und Ergebnispräsentation – je nach Hardware, Betriebssystem – zwischen 5 und 20 Sekunden andauern und ich empfehle bei intensiveren Rechercheprozeduren eine Auslagerung auf SSD-Platte (Bearbeitungsdauer ca. halbiert!).

Instagramrecherchearbeiten: ohne API und Token

Folgende Varianten wurden von mir getestet und als „produktiv“ eingestuft:

1) Grobüberlick über einen Account
https://www.instagram.com/[Accountname]/?__a=1
Diese Abfragemöglichkeit zeigt – im Wesentlichen – genau dieselben Inhalte (Accountgrunddaten, Medien plus Likes // Comments, usw) an, als wenn man eine beliebige Account-URL mit Hilfe des Browsers aufruft. Das Ergebnis wird hier im JSON-Format präsentiert und lässt sich über die (hoffentlich) bekannten Scrape- und Auswertungsprozeduren weiter verarbeiten.

2) Suche nach Medien, Accounts und Locations
https://www.instagram.com/web/search/topsearch/?query=test
Diese Abfragemöglichkeit fasst die Tagsuche, Accountsuche und Locationsuche zusammen und präsentiert die Ergebnisse in JSON-Format. Inhalte sind die Mediadaten der Tags, die Grunddaten der Accounts (Name, Nickname, Fans und Abos, Posts usw.) und die Grunddaten der Locations

3) Grunddaten eines Accounts
https://www.instagram.com/query/?q=ig_user(ID){id,username,external_url,full_name,profile_pic_url,biography,followed_by{count},follows{count},media{count},is_private,is_verified}
Diese Abfragemöglichkeit zeigt die wesentlichen Grunddaten eines Accounts an. Diese sind hier: ID, Username, externe URL, Name, Profil-Bild-URL, Abos und Fans, Posts und Bio. Das Ausgabeformat ist JSON.

4) Accountmedien
https://www.instagram.com/[accountname]/media/?max_id=20
Diese Abfragemöglichkeit zeigt die letzten 20 Posts eines beliebigen Accounts inklusive der Rohdaten (Likes, Comments, Zeitstempel usw.) der jeweiligen Medien. Ein komplettes Scrapen großer Feeds erscheint hier als unmöglich.

5) Tagrecherchen
https://www.instagram.com/explore/tags/[Tagname]/?__a=1
Diese Abfragemöglichkeit zeigt – im Prinzip – die Ergebnisse aus der Suche des Webanwendung und beinhaltet die jeweils beliebtesten und neuesten Beiträge inklusive deren Grunddaten (Likes, Comments, Zeitstempel usw.) aus der Tagsuche.

Tabellen, Daten etc. aus einer SQLite-Datenbank exportieren

Auf der Suche nach entsprechenden Möglichkeiten entdeckte ich das folgende Tool:
SQLite Export
Diese interessante Anwendung exportiert aus unserer Hashtagdatenbank ca. 70 Mio Datensätze in die Formate xls, html, txt und csv innerhalb von maximal 10 Minuten.

Eine weitere und freie Anwendung ist das „SQLiteStudio„. Diese erlaubt, neben den Exportfunktionen, auch das komplette Management einer SQLite-Datei, sowie auch den Import via CSV.

Hashtagprojekt – Einblicke in die Datenbank, Tagliste(n) und Queries

Der angedockte Client wurde um entsprechende Exportfunktionen erweitert und das Projekt beherbergt folgende Datensätze:

(a) Queries
Diese Angaben beschreiben die Tags, welche via API als Suchanfrage verarbeitet werden.

Downloads
searchview_0-9.zip
searchview_a-z.zip

(b) erfasste Tags
Diese Angaben sind das Ergebnis aus (a). Bitte hier beachten, dass die Listen ungewichtet sind und keine Häufungen ausgeben.

Downloads
tagview_0-9.zip
tagview_a-f.zip
tagview_g-m.zip
tagview_n-s.zip
tagview_t-z.zip

[Delphi] Texte im Unicode speichern.

Bei einer speziellen Exportfunktion des Hashtagprojektes entdeckte ich, dass die „savetofile“-Prozedure leider keine Unicode-Zeichenketten (Pictogramme, etc.) in die gewünschte Text-Datei oder CSV übertragen kann. Die Problemlösung sieht so aus:

procedure tform1.savetounicode(mytext: tmemo; filename: string);
begin
Writer := TStreamWriter.Create(filename,
false, TEncoding.UTF8);
Writer.WriteLine(mytext.Text);
Writer.Write(mytext.Text);
Writer.Free();
end;

Aufruf der Prozedure:
savetounicode(memo,dateipfad+dateiname);

Inspiriert von:
Saving string or stringlist to unicode textfile