Engagement-Gruppen für Instagram: Ein erstes Zwischenfazit

Vor einigen Tagen berichtete ich hier über das Hochfahren diverser Gruppenexperimente für die Reichweitenerhöhung von Instagram-Accounts und nun wird es Zeit für eine erste Bilanz.
Wie bereits angedeutet, hält sich der Arbeitsaufwand (Arbeit in und mit den Gruppen) stark in Grenzen: Ich schätze diesen auf ca. 30 Minuten pro Tag. Die Sichtung des Accounts ergab nun folgende Beobachtungen:

-> Starker Zulauf von Interaktionen aus Accounts mit folgenden Metriken:
(a) zwischen 10k und 280k Follower zu zwischen 1000 und 8000 Abos
(b) Interaktionen auf den zulaufenden Accounts bewegen sich im „gesunden“ Rahmen (also: ~600 bis z.T. ~2500, vmtl. auch in Teilen über die Gruppen organisiert)
(c) Followersprung des Testaccounts von ca. 7.000 auf ca. 9.000 Follower
(d) Sofortpositionierung von frischen Medien auf „Aktuelle“ und „Beliebteste“
(e) Enorme Reichweitensteigerung des Accounts (~4.000 auf ~80.000, je Woche)
(f) stärkeres Aufkommen von natürlichen Kommentaren
(g) Etablierung von Kontakten (KEINE Influencermarketingkooperationen!)
(h) starke Reputationsabfärbung, wenn der Account eine Empfehlung auf andere Accounts „ausspricht“
(i) Organische Interaktionen innerhalb der gruppen ohne eigenes Zutun

Mir fehlt im Moment die Zeit, den Account und den Gegenprobe-Account mit den dokumentierten API-Methoden final zu verifizieren. Agenturintern werden wir diese Strategieform diskutieren, um sie eventuell im Tagesgeschäft anzuwenden. Ich sehe schlichtweg keine unkalkulierbaren Risiken, sofern der berühmte Marketingmix passt, die Inhalte wertvoll sind & die Botschaften des Accounts samt der einhergehenden Firmenphilosophien stimmig sind.

Wie kann ich interagierende Accounts mit Hilfe eines Instagrambugs auslesen?

In einer der letzten Vertriebs- und Verkaufsveranstaltung (Subthema: Erkennen und Bewerten von Accounts, Interaktionen usw.) wurde ich inspiriert, eine geeignete technische Lösung zu recherchieren, welche die Titelfrage beantwortet. Der Grund ist einfach: Durch die Beschneidung der Instagram-API ist die technische Erfassung o.g. Metriken schlichtweg nicht mehr möglich. Einen Ausweg bietet folgende Vorgehensweise:

[AbfrageURL]
https://www.instagram.com/[Accountname]/?__a=1

[Codekonzept]
lade_account_liste(datei,DB)
//-> Erfassen der Likenden
for l=0 to liste_ende do
begin
httpget(https://www.instagram.com/liste[l]/?__a=1
(1) extract(graphql->user->edge_owner_to_timeline_media->edges->[NrX]->node[X]->edge_media_preview_like->count)
(2) extract(graphql->user->edge_owner_to_timeline_media->edges->[NrX]->node[X]->edge_media_preview_like->edges->[NrY]->node[Y]->id)
(3) extract(graphql->user->edge_owner_to_timeline_media->edges->[NrX]->node[X]->edge_media_preview_like->edges->[NrY]->node[Y]->profile_pic_url)
(4) extract(graphql->user->edge_owner_to_timeline_media->edges->[NrX]->node[X]->edge_media_preview_like->edges->[NrY]->node[Y]->username)
end

[Erklärung]
„httpget“ = Ergebnis der Abfrage wird herunter geladen
„extract“ = Das Ergebnis der Abfrage wird nach der Variable durchsucht und die Inhalte werden im gewählten Format gespeichert.
„lade_account_liste“ = Die zu begutachtenden Accounts werden in Listenform (Textdatei, SQLTab etc.) in die Prozedur eingespielt.

Die Manuelle Sichtung der Ergebnisse kann man mit https://jsoneditoronline.org/ erledigen. Hier einfach die Abfrageurl https://www.instagram.com/[Accountname]/?__a=1 mit dem Accountnamen im Browser eintragen und das Resultat in den jsoneditor kopieren.

[Erklärung: Datensätze]
(1) Auslesen der aktuellen Likes als Zahl
(2) Auslesen des likenden Accounts in Form der InstagramID
(3) Auslesen der Profilbildurl des likenden Accounts
(4) Auslesen des likenden Accountnamens

[Fazit]
Ich bezeichne den begutachteten Erhebungsweg bewusst als „Bug“, da Instagram offziell das Erfassen dieser Datensätze im letzten API-Entwicklungsturnus geschlossen hatte. Nun mag man davon halten, was man möchte und ich sehe u.a. hier für mich den Beleg dafür, dass die geschlossenen Endpoints selbstverständlich nach wie vor aktiv sind. Vielleicht beschäftig sich Instagram mit der Bug-Bereinigung, vielleicht bleibt aber auch diese Abfragevariante „ewig“ offen. Die Sichtung des JSON-Codes zeigte mir, dass „leider“ nur eine begrenzte Anzahl an interagierenden Accounts auslesbar ist, aber auch dieses Problem lässt sich elegant über eine geeignete Timer-Variante lösen. Diese aktiviert im Prinzip im Sekundentakt den Scrapingvorgang und holt sich die gewünschten Datensätze ab, speichert und verarbeitet die Eintragungen. Hochfaszinierend ist in diesem Gedankenspiel die Metrik „Username“: Die Inhalte aus der Variable lassen sich in geeignete Listen übertragen und in das o.g. Grobkonzept einspielen. Über diesen Weg erfährt der wissensdurstige Dataminer alles aus dem Medienstream des Influenceraccounts / Accounts UND den Accounts, welche eben mit dem Hauptanalyseobjekt interagieren.

Hier setzt bei mir das kritische und hinterfragende Nachdenken an:
Welchen Wert haben umfangreiche Datenschutzerklärungen, wenn bspw. Social Media problemlos recherchierbare Lücken für die Datenerhebungen offen lassen?
Welchen Wert haben offzielle Ankündigungen und Umsetzungen zu API-Änderungen, gerade aus dem FB-Haus in Verbindung mit Cambridge Analytica?
Welchen Wert haben Äußerungen aus dem Hause Facebook bzgl. der Kontrolle der Datenzugriffe von Externen, wenn (a) dieser „Bug“ identifizierbar und (b) nutzbar ist?

Ich muss gestehen, dass ich einen gewaltigen Nutzen in diesen Datenerhebungsvarianten sehe. Natürlich habe ich über die Nutzbarmachung im Interesse der Wobus & Lehmann GbR nachgedacht, bin aber letztendlich davon abgekommen, weil mir derzeit kein sauberes Anonymisierungsverfahren bekannt ist. Ich finde es schade, dass die Influencer-Marketing-Agenturszene schweigt und keinerlei Analysen, Statements oder generell Worte zu dieser Datenproblematik veröffentlicht.

Wie kann ich Follower- und Abozahlen von beliebigen (offenen!) Accounts aus Instagram monitoren?

In einer der letzten Vertriebs- und Verkaufsveranstaltungen empfand ich Inspiration zur Recherche einer geeignenen technischen Lösung, welche die Titelfrage beantwortet. Der Grund ist einfach: durch die Beschneidung der Instagram-API ist die technische Erfassung o.g. Metriken schlichtweg nicht mehr möglich. Einen Ausweg bietet folgende Vorgehensweise:

[AbfrageURL]
https://www.instagram.com/[Accountname]/?__a=1

[Codekonzept]
lade_account_liste(datei,DB)
for l=0 to liste_ende do
begin
httpget(https://www.instagram.com/liste[l]/?__a=1
extract(graphql->user->edge_followed_by->count)
extract(graphql->user->edge_follow->count)
end

[Erklärung]
„httpget“ = Ergebnis der Abfrage wird herunter geladen
„extract“ = Das Ergebnis der Abfrage wird nach der Variable durchsucht und die Inhalte werden im gewählten Format gespeichert.
„lade_account_liste“ = Die, zu begutachtenden, Accounts werden in Listenform (Textdatei, SQLTab etc.) in die Prozedur eingespielt.

Die Umsetzung der technischen Lösung ist eigentlich relativ simpel via PHP, Delphi oder anderen Szenarien machbar. Ich würde, sofern ich Interesse hätte, hier einen zeitlichen Aufwand von maximal 1-2 Stunden inkl. Testen und Fehleranalyse einkalkulieren. Jedoch muss ich das Monitoren dieser Zahlen intern mit Anne ausdiskutieren, denn eigentlich berühren eventuelle Erfassungen natürlich auch aktuelle Datenschutzdiskussionen, denn: im Ergebnis der o.g. Abfrage befinden sich sämtliche Accountangaben aus dem Profil, die Historie der letzten Postings und auch (!) Auszüge der Likenden (also: ID, Username) auf den letzten Medien des analysierten Accounts. Hier stellt sich für mich auch die Frage, wie gut / praktikabel etc. der Einsatz der üblichen Instagramaccountbeobachtungswerkzeuge denn ist. Vielleicht werde ich das Thema etwas „entspannter“ betrachten, wenn ich eine saubere Codierungsfunktion gefunden oder erfunden habe.

Instagram – Livevideos (für weitere Verarbeitung und Vermarktung) downloaden

Im Zuge der Etablierung diverser „Pseudohobby“-Projekte mit Schwerpunkt auf „Fotos“ und „Analogfotos“ suchte ich nach einer Lösung, welche einmal abgedrehte Livevideos für die Verteilung in bspw. Youtube-Konstellationen überhaupt erlaubt. Instagram liefert mit den Boardmitteln / via App die Downloadoption – als Feature – direkt nach der Videobeendigung, allerdings ohne Kommentare der jeweiligen Zuschauer_innen.
Eine interessante Kompensationslösung liefert das Chrome-Plugin „Chrome IG Story„. Die Bedienungsanleitung ist laiengerecht gestaltet und formuliert. Das Download hat das Format „mp4“ und die Qualität der Datei entspricht den üblichen Standards.

Analyse: Orte, Location via Instagram und Facebook

Ich hatte in diversen Gesprächen und sonstigen Statements angedeutet, dass wir einige Experimente (spez. Likes, Socialmediautomatisierungen und Contentmarketingansaetze) mit den Erkenntnissen aus „Locations“ durchführen. Diese sind flächendeckend positiv ausgegangen. Die nachfolgenden Quellcodes stammen aus dem aktuellen Recherchetool (INSTA-FINAL)

Ich nutze die Daten für das Abarbeiten folgender Szenarien:
(a) Liken via Instafinal
(b) konkrete Firmen und Locationanalyse
-> Was wird geschrieben?
-> Wieviele Menschen sind da WANN aktiv und was schreiben die, was
bewegt die?
-> Vorbereitungen auf Messen, da Messen selbstverständlich Locations sind.
-> Vorbereitungen auf konkrete Messegespräche
-> Aufbereitung der Daten für die üblichen Akquisevorbereitungen
-> Erkenntnisgewinnung, Inspiration für div. Contentmarketingansätze
(c) Hashtagrecherchen

//-> Locationrechercheprozedur

1. Schritt: Token von Facebook besorgen

How to get a Facebook Access Token

2. Schritt: Mit Facebook-Token nach Orten, Firmen usw. suchen

procedure TForm1.Button42Click(Sender: TObject);
var l_clear: integer;
var
JSONArray: tJSONArray;
JSONValue,jvalue: tJSONValue;
JSONPair: TJSONPair;
JSON, json_sub: TJSONObject;
size: integer;
j_array: tJSONArray;
s: string;
i,j: integer;
next_id: string;
chk_br: char;
begin
locsearch.text := StringReplace(locsearch.text, ‚ ‚, ‚+‘,
[rfReplaceAll, rfIgnoreCase]);
listbox2.Items.Clear;
with locs do
begin
cells[0,0]:=’Nr.‘;
cells[1,0]:=’Name‘;
cells[2,0]:=’ID-Code‘;
cells[3,0]:=’URL‘;
colcount:=4;
rowcount:=1;
end;
try
with debug do
begin
clear;
text:=idhttp1.Get(‚https://graph.facebook.com/search?q=’+locsearch.Text+’&type=place&access_token=’+fbtoken.text);
end;
JSONValue := TJSONObject.ParseJSONValue(debug.text);
JSON := TJSONObject.ParseJSONValue(debug.Lines.Text) as TJSONObject;
JSONArray := TJSONArray(JSON.Get(‚data‘).JsonValue);
memo1.Clear;
for i := 0 to JSONArray.Size – 1 do
begin
with locs do
begin
cells[0,rowcount]:=inttostr(rowcount);
cells[1,rowcount]:=TJSONPair(TJSONObject(JSONArray.Get(i)).Get(’name‘)).JsonValue.Value;
listbox2.Items.Add(cells[1,rowcount]);
cells[2,rowcount]:=TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚id‘)).JsonValue.Value;
cells[3,rowcount]:=’https://www.instagram.com/explore/locations/’+cells[2,rowcount]+’/‘;
rowcount:=rowcount+1;
end;
end;
grdColWidth(locs, 40);
except
end;
end;

3. Schritt: Medien aus Locations abholen und ggf. analysieren

procedure TForm1.get_loc_short(mytable: TStringGrid; locid: string);
var
JSONArray: tJSONArray;
JSONValue,jvalue: tJSONValue;
JSONPair: TJSONPair;
JSON, json_sub: TJSONObject;
size: integer;
j_array: tJSONArray;
s: string;
i,j: integer;
next_id: string;

begin
with mytable do
begin
cells[0,0]:=’Nr.‘;
cells[1,0]:=’URL‘;
cells[2,0]:=’Tag‘;
cells[3,0]:=’Likes‘;
cells[4,0]:=’Comments‘;
cells[5,0]:=’Erstellzeit‘;
cells[6,0]:=’ID‘;
colcount:=7;
rowcount:=1;
end;
memo3.Lines.Add(‚url =>
https://api.instagram.com/v1/locations/’+locid+’/media/recent?access_token=’+token.text);
memo3.Lines.SaveToFile(verz+’\tmp_mediaurlsapi.txt‘);
try
debug.text:=idhttp1.Get(‚https://api.instagram.com/v1/locations/’+locid+’/media/recent?access_token=’+token.text);
debug.text:=idhttp1.Get(‚https://www.instagram.com/explore/tags/’+tagsuche+’/?__a=1‘);
JSONValue := TJSONObject.ParseJSONValue(debug.text);
JSON := TJSONObject.ParseJSONValue(debug.Lines.Text) as TJSONObject;
JSONArray := TJSONArray(JSON.Get(‚data‘).JsonValue);
try next_id:= JSONValue.GetValue(‚pagination.next_url‘);
except
end;
for i := 0 to JSONArray.Size – 1 do
begin
with mytable do
begin
cells[0,rowcount]:=inttostr(rowcount);
cells[1,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚link‘)).JsonValue.Value);
s:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚tags‘)).ToString);
s:= StringReplace(s, ‚“tags“:[‚, “, [rfReplaceAll,rfIgnoreCase]);
s:= StringReplace(s, ‚]‘, “, [rfReplaceAll,rfIgnoreCase]);
cells[2,rowcount]:=s;
s:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚likes‘)).ToString);
s:= StringReplace(s, ‚“likes“:{„count“:‘, “,
[rfReplaceAll,rfIgnoreCase]);
s:= StringReplace(s, ‚}‘, “, [rfReplaceAll,rfIgnoreCase]);
cells[3,rowcount]:=s;
s:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚comments‘)).ToString);
s:= StringReplace(s, ‚“comments“:{„count“:‘, “,
[rfReplaceAll,rfIgnoreCase]);
s:= StringReplace(s, ‚}‘, “, [rfReplaceAll,rfIgnoreCase]);
cells[4,rowcount]:=s;
cells[5,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚created_time‘)).JsonValue.Value);
cells[5,rowcount]:=datetimetostr(UnixToDateTime(strtoint(cells[5,rowcount])));
cells[6,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚id‘)).JsonValue.Value);
rowcount:=rowcount+1;
end;
grdColWidth(mytable, 40);
end;
except
end;
//uebertrag auf tabelle
grdColWidth(mytable, 40);
form1.Caption:=version+‘ alle Posts herunter geladen‘;
end;

[Delphi] Instagram – Likende auf Medien identifizieren und Datensätze speichern

[Datenquellen und Erklärungen]
„mylikers“ -> Anzahl der beobachteten Medien
„mytable“ -> Stringgridobjekt für die Ergebnisse
„oritable“ -> Stringgridobjekt für die Medienrohdaten
„oritable.cols[6].text“ -> Stringreihe für die Postcodes aus Instagram

procedure TForm1.getmylikers(mylikers: integer; mytable: TStringGrid; oritable: tstringgrid);
var lauf, lauf_gl: integer;
l_clear: integer;
JSONArray: tJSONArray;
JSONValue,jvalue: tJSONValue;
JSONPair: TJSONPair;
JSON, json_sub: TJSONObject;
size: integer;
j_array: tJSONArray;
s: string;
i,j: integer;
next_id: string;
chk_br: char;
HTTP: TIdHTTP;

begin
// => hole media_daten (unique-codes!)
debug.Text:=oritable.Cols[6].Text;
debug.Lines.Delete(0);
form1.Caption:=version+‘ ‚+inttostr(debug.Lines.Count-1)+‘ IDs eingelesen‘;
debug_03.Clear;

// init tabelle
with mytable do
begin
cells[0,0]:=’Nr.‘;
cells[1,0]:=’Username‘;
cells[2,0]:=’URL‘;
cells[3,0]:=’ID‘;
cells[4,0]:=’Post-ID‘;
cells[5,0]:=’Post-URL‘;
cells[6,0]:=’Tagcloud‘;
cells[7,0]:=’Postzeit‘;
rowcount:=1;
colcount:=8;
end;
for lauf_gl := 0 to mylikers do
begin
debug_01.Clear;
debug_01.ScrollBars:=ssboth;
randomize;
token.Text:=token.Items[random(token.Items.Count-1)];
debug_03.Lines.Add(‚https://api.instagram.com/v1/media/’+debug.Lines[lauf_gl]+’/likes?access_token=’+token.text);
try
HTTP := TIdHTTP.Create(nil);
form1.Caption:=version+‘ analysiere Likende, Bild: ‚+inttostr(lauf_gl)+‘ / ‚+inttostr(mylikers);
debug_01.Text:=HTTP.Get(‚https://api.instagram.com/v1/media/’+debug.Lines[lauf_gl]+’/likes?access_token=’+token.text);
JSONValue := TJSONObject.ParseJSONValue(debug_01.text);
JSON := TJSONObject.ParseJSONValue(debug_01.Lines.Text) as TJSONObject;
JSONArray := TJSONArray(JSON.Get(‚data‘).JsonValue);
http.free;
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
for i := 0 to JSONArray.Size – 1 do
begin
with mytable do
begin
cells[0,rowcount]:=inttostr(rowcount);
cells[1,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚username‘)).JsonValue.Value);
cells[2,rowcount]:=’https://instagram.com/’+(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚username‘)).JsonValue.Value);
cells[3,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚id‘)).JsonValue.Value);
cells[4,rowcount]:=debug.Lines[lauf_gl]; // post-id
cells[5,rowcount]:=oritable.Cells[1,lauf_gl+1];
cells[6,rowcount]:=oritable.Cells[2,lauf_gl+1];
cells[7,rowcount]:=oritable.Cells[5,lauf_gl+1];
if zdb.Checked=true then
begin
save_infname:=prjlikeacc.Text;
save_likers:=useridlikeacc.Text;
with sql_befehle.Lines do
begin
clear;
add(‚INSERT INTO `interakt` (`name`, `url`, `uid`, `postid`, `posturl`, `tagcloud`, `inflid`, `inflname`, `postzeit`,`zeit`) Values (“’+cells[1,rowcount]+“‘, “’+cells[2,rowcount]+“‘, “’+cells[3,rowcount]+“‘, “’+cells[4,rowcount]+“‘, “’+cells[5,rowcount]+“‘, “’+escape(cells[6,rowcount])+“‘, “’+save_likers+“‘, “’+save_infname+“‘, “’+cells[7,rowcount]+“‘, “’+datetimetostr(now)+“‘ );‘);
fdquery2.ExecSQL(sql_befehle.text);
form1.Caption:=version+‘ in DB eingetragen …‘;
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;
end;
rowcount:=rowcount+1;
end;
end;
except
form1.Caption:=version+‘ Recherche und Analyse hat nicht funktioniert …‘;
end;
delay(50);
grdColWidth(mytable, 40);
end;
SaveToCSV(mytable,verz+’data\’+save_likers+‘.csv‘);
end;

Aufruf der Prozedur
getmylikers(strtoint(anzmedia.Text), table_likers, m_rohdaten);

Projekt „Instagram, Interaktionen“ – Basisaccountanalyse(n)

Die Auswertungsanwendung verfügt nun über zwei Basisanalyseprozeduren. Diese sind:
Ausgabe der erfassten Likes zu einem bestimmten Accounts:

(1) Ergebnisse inkl. Tagclouds, Posturls, Postzeitpunkt und (beherzter) Influenceraccount
tg_05
tg_04
liberal
tg_03
tg_02
tg_01

(2) Ergebnisse inkl. beherzter Influencername und Aufsummierungen der Likes JE erfassten / beherzten Influencer
ta_06
ta_05
ta_04
ta_03
ta_02
ta_01

Diese Funktionen dienen einer ersten und sehr groben Erkenntnisgewinnung. Zu einem späteren Zeitpunkt werden die Prozeduren so zusammen gefasst, dass sich aus der Analyse eines Influencer (oder: Einsteiger)-accounts Likemuster der Interagierenden sichtbar machen lassen. Mir schwebt hierbei eine Influencer und / oder Tagcloudauflistung inkl. Gewichtung via Aufsummierung vor und ich muss hierzu noch einige Inspirationen suchen.

Projekt „Instagram, Interaktionen“ – Tagcloudanalysen

Die Abfrage für die nachfolgenden Datensätze ist:
select tagcloud, length(tagcloud), count(distinct(uid)), count(distinct(inflname)), count(distinct(postid)) from interakt where tagcloud like ''%'+abfrage+'%'' group by tagcloud;

Die aktuellen Ergebnisse beinhalten folgende Angaben:

(1) Tagcloud (tagcloud) (als substring)
(2) Zeichenkettenlänge der Tagcloud (length(tagcloud))
(3) Anzahl der Interaktionen // Anzahl der Interagierenden Accounts (count(distinct(uid))
(4) Anzahl der Influencer-Accounts (count(distinct(inflname))
(5) Anzahl der Postings (count(distinct(postid))

Alle Angaben verstehen sich als „je UNIQUE Tagcloud“ und DIE Tagcloud beschreibt die Tagsammlungen.

Beispieldatensätze (Excel, Download)
[Politik]
Download: christianlindner
Download: bundestagswahl
Download: bundestag
Download: dielinke

[Wohnung, Home & Living]
Download: badezimmer
Download: wohnzimmer
Download: kinderzimmer

[Städte]
Download: leipzig
Download: berlin

[Sonstiges]
Download: geschenk
Download: stricken

[Urlaub]
Download: urlaub
Download: strand
Download: meer

[Hinweise und allgemeine (!) Erklärungen]
Die Angabe zur Zeichenkettenlänge der jeweiligen Tagwolken liefert in Verbindung mit den Zahlen aus (3), (4) und (5) eine Interpretationsgrundlage für die Beantwortung folgender Fragen:
Wieviele Tags machen je Posting Sinn?
Welche Taghäufungen im Sinne der reinen Anzahl provozier(t)en wieviele Likes?
Exkludiert man nun besagte Zeichenkettenlänge aus der Datenbegutachtung, ergeben sich in Verbindung mit den Zahlen aus (3), (4) und (5) die Möglichkeit(en) zur Beantwortung folgender Fragen:
Welche Themen in Form der Tags „kommen an“?
Welche Themen in Form der Tags werden von wieviel Accounts wahrgenommen UND honoriert?
Welche Themen in Form der Tags werden von wieviel Accounts veröffentlicht?
Die Datensätze liefern einen relativ groben Überblick zu den gesuchten Themen. Sie geben analog zur genannten Abfrage keinerlei Auskunft zu den Postingzeiträumen und den konkreten Interagierenden / Influencern, da hier diese Angaben nicht mitgeliefert werden. Hier ist eine entsprechende Tiefenprüfung via erweiterter DB-Abfrage natürlich obligatorisch.

Anfragen, Nachfragen und generelle Gesprächsangebote bitte an office(at)pontipix.de.

Interaktionsanalyseprojekt (Instagram) Datenbankqueries

Nachfolgend einige Queries für die Interaktionen-Datenbank. Ich bitte die Hinweise zu beachten, welche am Ende der Liste stehen.

(A) Basisabfragen
(1) Einträge zählen
select count (*) from interaktionen.interakt

(2) Interaktionen (nach Accountname) aufsummieren
select count (distinct(name)) from interaktionen.interakt

(3) Tagclouds zählen
select count (distinct(tagcloud)) from interaktionen.interakt

(4) Tagclouds ausgeben
select distinct(tagcloud) from interaktionen.interakt group by tagcloud

(B) Likende / Interagierende
(1) Likende inkl. der Aufsummierung DEREN Likes
select count (name), name from interaktionen.interakt group by name order by count(name) DESC
select count (name), name from interaktionen.interakt group by name
select count(uid), name from interakt group by name order by count(uid) DESC;
(2) Likende und die gelikten Posts
select tagcloud, inflname from interakt where name = “’+edit1.text+“‘ order by inflname DESC

(C) Influencer / analysierte Accounts
(1) Ausgabe und Zuordnung der Likenden zu den analysierten Accounts (Influencer)
select inflname, name from interakt where name like ‚cdu%‘ group by name
Hinweis: „like ‚cdu%“ lässt sich entsprechend zu „‚%suchstring'“ oder auch „‚%suchstring%'“ austauschen
(2) Ausgabe und Aufsummierung der Interaktionen ZU DEN Influenceraccounts
select count (inflid), inflname from interaktionen.interakt group by inflid order by count(inflid) DESC;
select count (inflid), inflname from interaktionen.interakt group by inflid;
(3) Influencer auflisten
select distinct(inflname) from interakt;
(4) Influencer inkl. Summe der Likenden / Likes
select count(name),inflid,inflname from interakt group by inflname order by count (name);

(D) Tagclouds
(1) Ausgabe und Gewichtung der Tagclouds nach Aufsummierung der Likes je Tagcloud
select count(tagcloud), tagcloud from interakt group by tagcloud order by count(tagcloud) DESC;

(E) Tiefergehende Abfragen
(1) Auflistung von Interaktionen aus zwei Influenceraccounts.
select i1.inflid, i1.url, count(distinct i1.id) as „Anzahl1“ ,
count(distinct i2.id) as „Anzahl2“
from (select * from interakt where interakt.inflid = ‚ID1‘) „i1“
join (select * from interakt where interakt.inflid = ‚ID2‘) „i2“ on
(i1.url = i2.url)
group by i1.inflid, i1.url order by „Anzahl1“ desc, „Anzahl2“ desc
Quelle: Jens Pacholsky http://startup-helpers.de/

Sämtliche Abfragen wurden grob (!) auf Fehler geprüft und ich nehme für mich hier nicht die absolute Eleganz oder Fehlerfreiheit in Anspruch. Weitere Abfragen werden in unregelmäßigen Abständen hier hinzugefügt.