Getting video's information is returning wrong results

Yes!!! I did it! :smile:
there is my code:

function Https_Get(ServerName, Resource : string;
                   var res : string;
                   var ErrorCode : Integer) : Boolean;
const
  sUserAgent = 'Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101';
  BufferSize = 1024*64;
var
  hInet    : HINTERNET;
  hConnect : HINTERNET;
  hRequest : HINTERNET;
  lpdwBufferLength: DWORD;
  lpdwReserved    : DWORD;
  dwBytesRead     : DWORD;
  lpdwNumberOfBytesAvailable : DWORD;
  b, _pos : Cardinal;
  ResponseText : AnsiString;
  Header : string;
  p : PChar;
begin
  Result := False;
  hInet := InternetOpen(PChar(sUserAgent), INTERNET_OPEN_TYPE_PRECONFIG,
                        nil, nil, 0);
  if Assigned(hInet) then
  begin
    hConnect := InternetConnect(hInet, PChar(ServerName),
                  INTERNET_DEFAULT_HTTPS_PORT, nil, nil,
                  INTERNET_SERVICE_HTTP, 0, 0);
    if Assigned(hConnect) then
    begin
      p := PChar('Accept: application/vnd.twitchtv.v5+json'+ #0);
      hRequest := HttpOpenRequest(hConnect, 'GET', PChar(Resource),
                  HTTP_VERSION, '', @p, INTERNET_FLAG_SECURE, 0);
      if Assigned(hRequest) then
      begin
        Header := 'Client-ID: <ID>';
        if not HttpSendRequest(hRequest, PChar(Header), Length(Header), nil, 0) then
        begin
          InternetCloseHandle(hRequest);
          InternetCloseHandle(hConnect);
          InternetCloseHandle(hInet);
          Exit;
        end;

        lpdwBufferLength := SizeOf(dword);
        lpdwReserved := 0;
        if not HttpQueryInfo(hRequest,
                             HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
                             @ErrorCode, lpdwBufferLength, lpdwReserved) then
        begin
          InternetCloseHandle(hRequest);
          InternetCloseHandle(hConnect);
          InternetCloseHandle(hInet);
          Exit;
        end;

       if ErrorCode = 200 then
       begin
         _Pos := 1;
         b := 1;
         ResponseText := '';
         while b > 0 do
         begin
           if not InternetQueryDataAvailable( hRequest,
                                lpdwNumberOfBytesAvailable, 0, 0 ) then
           begin
             Result := False;
             InternetCloseHandle(hRequest);
             InternetCloseHandle(hConnect);
             InternetCloseHandle(hInet);
             Exit;
           end;
           SetLength( ResponseText, Length(ResponseText) + lpdwNumberOfBytesAvailable );
           InternetReadFile(hRequest, @responsetext[_pos],
                           lpdwNumberOfBytesAvailable, b );
           Inc(_Pos, b);
         end;
         res := UTF8ToString(ResponseText);
         Result := True;
       end;
       InternetCloseHandle(hRequest);
      end;
      InternetCloseHandle(hConnect);
    end;
    InternetCloseHandle(hInet);
  end;
end;


//using:
var
  JsonString : string;
  ErrorCode : integer;
begin
  if https_get('api.twitch.tv', '/kraken/channels/<channel ID>/videos?limit=100&broadcast_type=all', JsonString, ErrorCode) then
  memo1.Lines.Text := JsonString;
end;

It’s working! Thank you!

1 Like