[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: 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

[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.

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

[Notiz] Instagram: Accountbeobachtungen und dauerhafte Auswertungen der Grunddaten

Nach einigen Gesprächen mit Kund_innen, Kolleg_innen und Geschäftsfreund_innen habe ich mich nun final dazu entschieden, eine kleinere Anwendung für die Accountbeobachtung zu entwickeln. Eigentlich hält sich hier der Programmieraufwand stark in Grenzen, aber ich wundere mich dennoch, dass eine simple Grunddatenschau (also: Anzahl der Posts, Fans und Abos) auf dem freien Markt via Tools und Dienstleistungen durchaus sehr teuer ist.
Also: ab Mitte der kommenden Woche werde ich unseren Partner_innen eine Lösung freigeben, welche sich stark am Hashtagprojekt orientiert. Die Grundlage hierfür ist eine Windowsanwendung mit angedockter SQLite-Datenbank, die per EMail-Schnittstelle ansteuerbar sein wird. Die konkrete Reportinggestaltung wird sich am Ursprungsprojekt orientieren.