ESP8266 Instragram ausgabe immer 0

Hallo,
ich habe ein I2C Display an meinem ESP8266 angeschlossen. Ich möchte gern die Anzahl meiner Instagram Follower anzeigen lassen. Den Code hierfür habe ich aus einem Tutorial. Er verbindet sich mit dem Internet, aber seine Ausgabe ist immer, dass ich 0 Follower habe. Ich habe schon etliche Accounts ausprobiert. Die Übertragung zum Display funktioniert. Die “Antwort” von Instagram bleibt jedoch bei 0. Hat damit jemand Erfahrung und kann helfen? MFG

#include <Wire.h>                  // installed by default
#include <Adafruit_GFX.h>          // https://github.com/adafruit/Adafruit-GFX-Library
#include "Adafruit_LEDBackpack.h"  // https://github.com/adafruit/Adafruit_LED_Backpack

#include <ArduinoJson.h>           // https://github.com/bblanchon/ArduinoJson

#include "JsonStreamingParser.h"  // https://github.com/squix78/json-streaming-parser
#include "InstagramStats.h"       // https://github.com/witnessmenow/arduino-instagram-stats

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <SPI.h>

//------- Replace the following! ------
char ssid[] = "EasyBox";       // your network SSID (name)
char password[] = "meinpasswort";  // your network key

// Normally we would use these to generate the bearer token but its not working yet :/
// Use steps on the readme to generate the Bearer Token

WiFiClientSecure secureClient;
WiFiClient client;

InstagramStats instaStats(secureClient);



unsigned long api_delay = 1 * 6000; //time between api requests (1mins)
unsigned long api_due_time;

//Inputs

String userName = "vw_lt2";    // from their instagram url https://www.instagram.com/userName/


// label the displays with their i2c addresses
struct {
  uint8_t           addr;         // I2C address
  Adafruit_7segment seg7;         // 7segment object
} disp[] = {
  { 0x71, Adafruit_7segment() },  // High digits Twitter
  { 0x70, Adafruit_7segment() },  // Low digits Twitter
  //{ 0x74, Adafruit_7segment() },  // High digits Instagram
  //{ 0x73, Adafruit_7segment() },  // Low digits Instagram
  //{ 0x75, Adafruit_7segment() },  // High digits Instructables
  //{ 0x72, Adafruit_7segment() }   // Low digits Instructables
};

void setup() {

  Serial.begin(115200);
  
  for(uint8_t i=0; i<2; i++) {       // Initialize displays
    disp[i].seg7.begin(disp[i].addr);
    disp[i].seg7.clear();
    disp[i].seg7.writeDisplay();
  }

  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  IPAddress gateway;
  IPAddress subnet;
  delay(100);

  // Attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);
  gateway = WiFi.gatewayIP();
  Serial.print("GATEWAY: ");
  Serial.println(gateway);
  subnet = WiFi.subnetMask();
  Serial.print("NETMASK: ");
  Serial.println(subnet);

  

}



void getInstagramStatsForUser() {
  Serial.println("Getting instagram user stats for " + userName );
  InstagramUserStats response = instaStats.getUserStats(userName);
  delay(1000);
  Serial.println("Response:");
  Serial.println("Number of followers: ");
  Serial.print(response.followedByCount);
  uint16_t hi = response.followedByCount / 10000, // Value on left (high digits) display
           lo = response.followedByCount % 10000; // Value on right (low digits) display
      disp[0].seg7.print(hi, DEC);   // Write values to each display...
      disp[1].seg7.print(lo, DEC);

      // print() does not zero-pad the displays; this may produce a gap
      // between the high and low sections. Here we add zeros where needed...
      if(hi) {
        if(lo < 1000) {
          disp[1].seg7.writeDigitNum(0, 0);
          if(lo < 100) {
            disp[1].seg7.writeDigitNum(1, 0);
            if(lo < 10) {
              disp[1].seg7.writeDigitNum(3, 0);
            }
          }
        }
       } else {
         disp[0].seg7.clear(); // Clear 'hi' display
        }
       disp[0].seg7.writeDisplay(); // Push data to displays
       disp[1].seg7.writeDisplay();
}

void loop() {
 if (millis() > api_due_time)  {
    delay(600);
    getInstagramStatsForUser();
    delay(600);
    api_due_time = millis() + api_delay;
  }
  
}

Hier die Ausgabe meines serial monitors:

20:56:15.520 -> .
20:56:16.051 -> WiFi connected
20:56:16.051 -> IP address: 
20:56:16.051 -> 192.168.0.69
20:56:16.051 -> GATEWAY: 192.168.0.1
20:56:16.051 -> NETMASK: 255.255.255.0
20:56:16.649 -> Getting instagram user stats for vw_lt2
20:56:18.606 -> Response:
20:56:18.606 -> Number of followers: 0

Hast Du denn Follower? :wink:
Duck und wech.

Gruß Tommy

Wenigstens scheinst Du nicht der Einzige mit dem Problem zu sein: Returns 0 followers · Issue #10 · witnessmenow/arduino-instagram-stats · GitHub

ich habe gerade mal meinen Sketch aus http://forum.arduino.cc/index.php?topic=588536.0 ausprobiert - der klappt immer noch.

Bei Bedarf kann ich den auf die I2C Displays umbauen - das sind die 4stelligen 7 Segment Anzeigen mit HT16K33 oder?

Und es gilt immer:
verlinke die Hardware - in deinem Fall die Displays - die du verwendest! (!!!)
verlinke das Tutorial dem du folgst.

(links, die man anklicken kann!)

@Noiasca diesen Beitrag habe ich mir bereits durchgelesen und sein Code Ebenfalls getestet. Das Ergebnis war aber das selbe. Er hat hatte ja das Problem mit seiner Anzeige.

Habe zum Testen auch einfachmal nichts aufm Display zeigen lassen sondern nur im Serial Monitor.
Weil ich eben kein Problem mit der Hardware hatte habe ich das nicht berücksichtigt.

Werde mal eine delay einfügen das er zeit hat auf eine Antwort zu warten. Mal sehen ob das Klappt.

“Sein Code” war auch falsch daher hättest du nach “meinem” Code suchen müssen.

Das klappt bei mir einwandfrei - auch mit deinem Account.

Ich verwende eine andere Display Lib und andere i2c Adressen:

/*******************************************************************
    An example of using the InstagramStats library to get
    info on a given user.

    based on Brian Lough
    https://www.youtube.com/channel/UCezJOfu7OtqGzd5xrP3q6WA

    modified to use HT16K33 Adafruit dipslays by noiasca
    - https://forum.arduino.cc/index.php?topic=706410.0
    - http://forum.arduino.cc/index.php?topic=588536.0

  Version
    2020-09-20 09:00 HT16K33 OK
    2019-01-05 20:00 OTA, Fixtextausgabe
    2019-01-04 20:30 Erste funktionierende Version mit MD_MAX72XX

 *******************************************************************/

//------- Replace the following! ------
const char ssid[] = "sdfsdfsdfs";                      // your network SSID (name)
const char password[] = "sdfsdfsdsd";              // your network key
String userName = "duesseldorfhautnah";               // from their instagram url https://www.instagram.com/duesseldorfhautnah/
//String userName = "vw_lt2";


//------- some Parameters you can modify ------
const uint32_t delayBetweenChecks = 5 * 60 * 1000UL;            // mean time between api requests in ms ... 5 Minutes
const uint32_t delayBetweenFixtext = 4 *1000UL;                 // time between fixtext / followers
const char *fixtext[] = {"INST"                                 // Fixtext to be printed between the counter cycles
                        };

// ----------------------------
// Standard Libraries - Already Installed if you have ESP8266 set up
// ----------------------------

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

// ----------------------------
// Additional Libraries - each one of these will need to be installed.
// ----------------------------

#include <JsonStreamingParser.h>
// Used to parse the Json code within the library
// Available on the library manager (Search for "Json Streaming Parser")
// https://github.com/squix78/json-streaming-parser


#include <Wire.h>                                              // HT16K33 uses I2C, include the Wire Library
#include "NoiascaHt16k33.h"                                    // include the noiasca HT16K33 library - download from https://werner.rothschopf.net/201909_arduino_ht16k33.htm
Noiasca_ht16k33_hw_7_4_c display = Noiasca_ht16k33_hw_7_4_c(); // object for 7 segments, 4 visbible digits, colon digit. E.g. Adafruit 0.56" 4-Digit 7-Segment Display w/I2C Backpack

WiFiClientSecure client;
#include "InstagramStats.h"           // lokal hier im sketch

InstagramStats instaStats(client);

const byte noOfFixtext = sizeof(fixtext) / sizeof(fixtext[0]);  // Anzahl der obigen Fixtexte. Nicht hardcoded damit man das nicht manuell warten muss (und dann sowieso vergisst.
uint32_t mycounts = 0;                                          // die ermittelten Follower werden in einer globalen Variable gespeichert

#include <ArduinoOTA.h> // OTA Upload via ArduinoIDE

void do_textausgabe() {
  // Gibt der Reihen nach einen der vordefinierten Texte oder die Follower aus
  //
  static byte currentFixtext = 0;
  Serial.print (F("do_textausgabe:")); Serial.println(currentFixtext);
  display.clear();
  if (currentFixtext == noOfFixtext)        // if counter exceeds fixtext size we print the followers
  {
    display.print(mycounts);
  }
  else
  {
    display.print(fixtext[currentFixtext]); // von 0 bis n geben wir die definierten Fixtexte aus
  }
  currentFixtext++;
  if (currentFixtext > noOfFixtext) currentFixtext = 0;
}

// checks if it is time to update the display
void timerDisplayUpdate()
{
  static uint32_t previousFixtext = 0;                            // stores millis of last call
  uint32_t currentMillis = millis();
  if ((currentMillis - previousFixtext >= delayBetweenFixtext))  {
    do_textausgabe();
    previousFixtext = currentMillis;                              // bei langsamen displays (scrolltext) eher mit aktuellem millis() befüllen
  }
}

// checks if it is time to make an instagram request
void timerInstagramRequest()
{
  static uint32_t previousCheck = - delayBetweenChecks + 3000;    // let's start the first time after 3 seconds
  uint32_t currentMillis = millis();
  if (currentMillis - previousCheck >= delayBetweenChecks)  {
    getInstagramStatsForUser();
    previousCheck = currentMillis;
  }
}

/* *******************************************************************
         F U N C T I O N S
 ********************************************************************/

void getInstagramStatsForUser() {
  Serial.print   (F("Getting instagram user stats for "));
  Serial.println (userName);
  InstagramUserStats response = instaStats.getUserStats(userName);
  Serial.println(F("Response:\n"
                   "Number of followers: "));
  Serial.println(response.followedByCount);
  mycounts = response.followedByCount;
}

void ht16K33Setup()
{
  const byte brightness = 2;          // 0..15
  Serial.println(F("I: Init HT16K33"));
  Wire.begin();                        // start the I2C interface  MISSING: was tun, falls es andere bereits aktiviert haben?
  Wire.setClock(400000);               // optional: activate I2C fast mode. If it is to fast for other I2C devices. deactivate this row.
  display.begin(0x76, 2);              // I2C adress of first display, 2 devices, means, we are using 0x76 to 0x77 as "one" display
  if (display.isConnected() == false)                     // check if all HT16K33 are connected
    Serial.println(F("E: display error"));
  display.setBrightness(brightness);

  Serial.println(F("ON Test"));
  display.print(F("ON"));
}


/* *******************************************************************
         S E T U P
 ********************************************************************/
void setup() {
  Serial.begin(115200);
  Serial.println(F("\nInstagramm Abfrager"));
  ht16K33Setup();
  display.print(F("wifi"));
  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  // Attempt to connect to Wifi network:
  Serial.print(F("Connecting Wifi: "));
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(F("."));
    delay(500);
  }
  display.clear();
  display.print("conn");                      // connected
  Serial.println(F("\nWiFi connected"));
  Serial.println(F("IP address: "));
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);
  Serial.print(F("Defined number of fixtext:")); Serial.println(noOfFixtext);
  client.setInsecure();

  ArduinoOTA.begin(); // OTA Upload via ArduinoIDE
}

/* *******************************************************************
         M A I N L O O P
 ********************************************************************/
void loop() {
  timerDisplayUpdate();
  timerInstagramRequest();
  ArduinoOTA.handle(); // OTA Upload via ArduinoIDE
}

Ich habe aus deinen Code jetzt alles was dein Display ist raus geworfen und mir das als Serial.Print anzeigen lassen. Nach wievor kommt immer wieder nur Null. Hier die ausgabe von deinem Code:

16:29:20.050 -> WiFi connected
16:29:20.050 -> IP address: 
16:29:20.050 -> 192.168.0.69
16:29:20.050 -> Defined number of fixtext:1
16:29:20.050 -> do_textausgabe:0
16:29:20.050 -> INST
16:29:20.050 -> Getting instagram user stats for vw_lt2
16:29:24.311 -> Response:
16:29:24.311 -> Number of followers: 
16:29:24.311 -> 0
16:29:24.311 -> do_textausgabe:1
16:29:24.311 -> 0
[CODE]

@Noiasca Habe es nochmal aufgespielt und nun läuft es. Werde es jetzt anpassen. Danke für die hilfe

Das ausgeben der Zahl ist ja nicht das Problem. Sondern das er auch im Serial Monitor mir 0 zeigt.

Habe das ding jetzt 20 min laufen gehabt. Nach etwa 10 min ging die anzeige auf 0 und blieb auch da. habe es jetzt 3 mal neugestartet und jetzt zeigt er mir wieder eine Zahl an. Sonst halt immer nur 0.

Hast du da eine Idee?