Go Down

Topic: YoutubeApi Long in String umwandeln. (Read 113 times) previous topic - next topic

TechnikTreffHalverMo

Hallo liebe Arduino Gemeinde,

ich sitze schon seit 2 Tagen vor einem kleinen Problem. Hier erstmal der Code:

Code: [Select]

#include <FS.h>                    //this needs to be first, or it all crashes and burns...
#include <YoutubeApi.h>            // https://github.com/witnessmenow/arduino-youtube-api
#include <ArduinoJson.h>           // https://github.com/bblanchon/ArduinoJson

// these libraries are included with ESP8266 support
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

//------- enter your API key and channel ID here! ------
#define API_KEY XXX"  // your google apps API Token
#define CHANNEL_ID "XXX" // makes up the url of channel

int subscriberCount; // create a variable to store the subscriber count
bool erstanlauf = true;

WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

unsigned long api_mtbs = 600000; //mean time between api requests
unsigned long api_lasttime;   //last time api request has been done

// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define PRINT_CALLBACK  0
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define PRINT(s, v) { Serial.print(F(s)); Serial.print(v); }
#define CLK_PIN   D5 // or SCK
#define DATA_PIN  D7 // or MOSI
#define CS_PIN    D8 // or SS

// HARDWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// SOFTWARE SPI
//MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

uint8_t scrollSpeed = 25;    // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 2000; // in milliseconds

// Global message buffers shared by Serial and Scrolling functions
#define  BUF_SIZE  150
char curMessage[BUF_SIZE] = { "" };
bool newMessageAvailable = true;

void setup() {

  Serial.begin(115200);
  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //exit after config instead of connecting
  wifiManager.setBreakAfterConfig(true);

  //reset settings - for testing
  //wifiManager.resetSettings();


  //tries to connect to last known settings
  //if it does not connect it starts an access point with the specified name
  //here  "AutoConnectAP" with password "password"
  //and goes into a blocking loop awaiting configuration
  if (!wifiManager.autoConnect("ESP-Matrix", "matrix")) {
    Serial.println("failed to connect, we should reset as see if it connects");
    delay(3000);
    ESP.reset();
    delay(5000);
  }

  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");
  WiFi.hostname("ESP-Matrix");

  Serial.println("local ip");
  Serial.println(WiFi.localIP());
  client.setInsecure();

  P.begin();
  P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
}

void loop() {
 
   if (millis() - api_lasttime > api_mtbs || erstanlauf == true) {

    if (api.getChannelStatistics(CHANNEL_ID)) {

      Serial.println("---------Stats---------");
      Serial.print("Subscriber Count: ");
      Serial.println(api.channelStats.subscriberCount);
      Serial.print("View Count: ");
      Serial.println(api.channelStats.viewCount);
      Serial.print("Comment Count: ");
      Serial.println(api.channelStats.commentCount);
      Serial.print("Video Count: ");
      Serial.println(api.channelStats.videoCount);
      // Probably not needed :)
      //Serial.print("hiddenSubscriberCount: ");
      //Serial.println(api.channelStats.hiddenSubscriberCount);
      Serial.println("------------------------");

      String Zahl2 = String(api.channelStats.subscriberCount,DEC);
      String str = "Willkommen unser Youtubekanal hat jetzt " + Zahl2 +" Abonnenten.";
      Serial.print(str);
     
      newMessageAvailable = true;
    }
    erstanlauf = false;
    api_lasttime = millis();
  }
/*
   if (P.displayAnimate())
  {
    if (newMessageAvailable)
    {
      // Define
     
     
      // Length (with one extra character for the null terminator)
      int str_len = str.length() + 1;

      // Prepare the character array (the buffer)
      char char_array[str_len];

      // Copy it over
      str.toCharArray(char_array, str_len);

      //strcpy(curMessage, char_array);
      newMessageAvailable = false;
    }
    P.displayReset();
  }
*/
}


In diesen Zeilen
Code: [Select]

String Zahl2 = String(api.channelStats.subscriberCount,DEC);
String str = "Willkommen unser Youtubekanal hat jetzt " + Zahl2 +" Abonnenten.";
Serial.print(str);

steckt mein Problem. Ich möchte diesen Wert "api.channelStats.subscriberCount" als Text in meinem String str einbauen. Alle Einzelteile funktionieren. Wenn ich z.B. " Zahl2 = 13;" Schreibe, dann macht die Ausgabe das, was ich gerne hätte. In der Headerdatei von "api.channelStats.subscriberCount" steht, dass es sich um ein long handelt. Ich habe dieverse Sachen probiert. Alle die ich verstehe funktionierten nicht und die, die ich nicht verstehe, kann ich nicht umsetzen. Ich hoffe ihr könnt mir sagen, wie ich diese Zeilen umschreiben mus, damit das Ergebnis stimmt. Damit ich das besser verstehe, wären so ein paar Schlagwörter ganz gut, damit ich weiß wo ich suchen muss.

Danke schonmal für Eure Mühe

Derfips

String Zahl2 = String(api.channelStats.subscriberCount,DEC);
String str = "Willkommen unser Youtubekanal hat jetzt " + Zahl2 +" Abonnenten.";
Serial.print(str);


Hallo,
ich würde das "DEC" weglasssen.

Frag mich gerade wie das da rein kommt.
Aus den Beispielen der Lib hast du das sicher nicht.

Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

TechnikTreffHalverMo

Wie gesagt ich habe sehr viel probiert. Drin war es definitiv nicht.
lasse ich das ",DEC" weg bekomme ich im SerielMonitor keine Ausgabe auch nicht von den anderen Sach im loop. Es scheint so , als wenn alle zusammen bricht.
Schreibe ich statt dessen "String Zahl2 = String(2);"
Ist die spätere Ausgabe richtig.
Auch "Serial.println(api.channelStats.subscriberCount);" macht eine korrekte Ausgabe.

"api.channelStats.subscriberCount" bekomme ich nicht in einen String umgewandelt...

TechnikTreffHalverMo

Hab in unserem Techniktreff Hilfe bekommen. Für alle die das auch mal brauchen:
Code: [Select]

      char BUFFER[15];
      char *Name;
      Name = ltoa(api.channelStats.subscriberCount,BUFFER,10);
      str = "Unser Youtubekanal hat jetzt " + String(Name) +" Abonnenten. "

Go Up