Instagram: Download der Follower- und Abodatensätze (JSON)

Durch die API-Änderungen von Instagram wurde – wie bekannt – das Herunterladen dieser Datensätze etwas komplizierter. Die folgende Prozedure kann hier Abhilfe schaffen.

procedure TForm1.get_accounts(userid: string; uname: string; abfragetyp: string; maxerg: string; ziel: tmemo);
var
lHTTP: TIdHTTP;
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
Params, login : TStrings;
Reply, _Token, X, lf: string;
Cookie: TIdCookie;
begin
// login - anfang
try
Params := TStringList.Create;
Params.Add('username='+igaccounts.Text);
Params.Add('password='+token_w.text);
lHTTP := TIdHTTP.Create(nil);
try
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
IdSSL.SSLOptions.Method := sslvTLSv1;
IdSSL.SSLOptions.Mode := sslmClient;
lHTTP.IOHandler := IdSSL;
lHTTP.ReadTimeout := 30000;
lHTTP.HandleRedirects := True;
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
lHTTP.Get('https://www.instagram.com', TStream(nil));
Cookie := lHTTP.CookieManager.CookieCollection.Cookie['csrftoken', 'www.instagram.com'];
if Cookie <> nil then
_Token := Cookie.Value;
try
lHTTP.Request.CustomHeaders.Values['X-CSRFToken'] := _Token;
lHTTP.Request.CustomHeaders.Values['X-Instagram-AJAX'] := '1';
lHTTP.Request.CustomHeaders.Values['X-Requested-With'] := 'XMLHttpRequest';
lHTTP.Request.Referer := 'https://www.instagram.com/';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
Reply := lHTTP.Post('https://www.instagram.com/accounts/login/ajax/', Params);
finally
end;
finally
end;
Finally
// login => ende
// fans usw. erfassen
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
lHTTP.Request.Connection := 'keep-alive';
cookie := lHTTP.CookieManager.CookieCollection.Cookie['csrftoken', 'www.instagram.com'];
if cookie <> nil then
_token := cookie.Value
else
_token := '';
Params.Clear;
Params.Add('q=ig_user(' + userid + ') {'+LF+
' '+abfragetyp+'('+maxerg+') {'+LF+
' count,'+LF+
' page_info {'+LF+
' end_cursor,'+LF+
' has_next_page'+LF+
' },'+LF+
' nodes {'+LF+
' id,'+LF+
' is_verified,'+LF+
' followed_by_viewer,'+LF+
' requested_by_viewer,'+LF+
' full_name,'+LF+
' profile_pic_url,'+LF+
' username'+LF+
' }'+LF+
' }'+LF+
'}'+LF);
Params.Add('ref=relationships::follow_list');
lHTTP.Request.CustomHeaders.Values['X-CSRFToken'] := _token;
lHTTP.Request.CustomHeaders.Values['X-Instagram-AJAX'] := '1';
lHTTP.Request.CustomHeaders.Values['X-Requested-With'] := 'XMLHttpRequest';
lHTTP.Request.Referer := 'https://www.instagram.com/'+uname+'/';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36';
Reply := lHTTP.Post('https://www.instagram.com/query/', Params);
ziel.Text:=reply;
end;
end;

Verwenden der Prozedur
Die Prozedur verlangt die Übergabe der Account-ID, des Account-Names, der maximalen Datensätze und die „Memo“, welche das Ergebnis der Abfrage für die weitere Verarbeitung erfassen soll.

Sie wird wiefolgt aufgerufen:
1) Fans holen
get_accounts(account_id,account_name, ‚followed_by.first‘,’9999′, ziel_memo);

2) Abos holen

get_accounts(account_id,account_name, ‚follows.first‘,’9999′, ziel_memo);

Die Zahl „9999“ lässt sich beliebig austauschen und sie beschreibt hier den Maximalwert, unter dem die Prozedur fehlerfrei funktioniert. Bei höheren Zahlen muss der Automatismus um eine geeignete Schleife erweitert werden.

Welche konkreten Funktionen lassen sich nun aus den Ergebnissen dieser Prozedur ableiten?
– Datenabgleich der Account-IDs mit den Likenden
– Datenabgleich der Account-IDs mit den Kommentierenden
– Erfassen und Auswerten des Fanengagements
– Erfassen von Likenden / Kommentierenden, welche weder Fans noch Abos sind
– Aktivitätsanalysen konkreter Zielgruppen
– Aufdecken und Analysen von Fakes
– Aktivitätsanalysen der Accounts aus den IDs via Postanalysen

Inspirationsquelle für den Code
How to get Instagram following list using http component in Delphi 10
Find my Instagram-ID

Instagram: Bilder in der großen Auflösung finden und zum Download aufbereiten

Unser Instagram-„Bot“ verfügt nun in der Versionsnummer „0.7b“ über eine Backupfunktion. Diese umfasst im Wesentlichen das Sichern der Bilder aus den IG-Beiträgen des eigenen Accounts.
Diese Prozedure wurde wiefolgt realisiert:

1. Scrapen, Abholen des eigenen Streams
2. Speichern der Posturl-Liste in eine „Memo“
3. Schleife: (for-to-do) Ansurfen der Post-Urls
3.1. Quellcodeanalyse und suchen nach:
og:image“ content=“bildurl?ig_cache_key=key“
3.2. Entferne cache_key
3.3. Download der Bilder

Weiter lesen, Quellcodebeispiele
Datei aus dem WWW downloaden (Delphi)
Quelltext aus TWebbrowser auslesen
Rohdatenanalyse, IG-Account

Instagram – Download der eigenen Fotos

Ein praktikabler (kostenfreier) Service ist hier: http://instaport.me/export zu finden.

Nach dem Einloggen (Angabe der Instagram-Account-Daten) gelangt man zu einer Feinauswahl der hinterlegten Fotos (alle Fotos, Fotos aus einem bestimmten Zeitraum, die letzten XXX Fotos oder Fotos mit einem speziellen Tag). Die jeweilig getroffene Wahl wird im Hintergrund in Form eines Archives zum Download vorbereitet. Achtung: je nach Umfang des persönlichen Accounts kann die Datenaufbereitung mehrere Minuten andauern.

Viel Spaß.

 

piXologisch EasyRecherche 0.7b Download

Es handelt sich hierbei um eine eingeschränkte Version.

Gesperrt ist:

  1. Report via EMail versenden
  2. Report als RSS-Feed publizieren

Download easyrecherche

Nach einigen Gesprächen und Sichtungen der pontipix.de-Zugriffsstatistiken habe ich mich entschlossen, das Thema „Preisrecherche“ oder „Preisvergleich“ wieder aufleben zu lassen und in das Projekt „EasyRecherche“ zu integrieren. Aus meiner Sicht lassen sich Erkenntnisse gewinnen, wenn nachgefragt wird:

  1. Wieviele Produkte / Produktanbieter existieren zu Phrase / Key XYZ?
  2. Wie hoch / niedrig sind die Preisspannen zu den jeweiligen Produkten?