Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызов погодного API / 11 сообщений из 11, страница 1 из 1
02.11.2017, 13:22:30
    #39546693
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
Решил смеха ради зачитать погодный API.
Зашел на openweathermap.org и попробовал вызвать погоду для Лондона таким кодом (см. ниже. Код взят с инета)
Он вернул JSON с текстом:
"Invalid API key. Please see http://openweathermap.org/faq#error401 for more info."

ОК. Нужен APPID.
Зарегал APPID код. Браузер начал возвращать нормальный погодный JSON.
А вот прожка начала возвращать в Showmessage пустоту.
Причем даже без кода уже не возвращает "Invalid API key".

Для сервисов Bing (переводы) код работает нормально. Правда там XML и часто кончается квота.
С вебсервисами раньше не сталкивался. :)

Где поломка ? Чо потерялось ?

Код ниже уже с APPID
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
unit WeatherAPI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  ShellApi,  ActiveX,  ComObj,  WinInet, StdCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
   Weather = 'api.openweathermap.org/data/2.5/weather?q=London,uk&units=metric&APPID=3b2ad077bd300f6880a9657fff39a432';

procedure WinInet_HttpGet(const Url: string;Stream:TStream);overload;
function   WinInet_HttpGet(const Url: string): string;overload;

implementation

{$R *.dfm}

procedure WinInet_HttpGet(const Url: string;Stream:TStream);overload;
const
BuffSize = 1024*1024;
var
  hInter   : HINTERNET;
  UrlHandle: HINTERNET;
  BytesRead: DWORD;
  Buffer   : Pointer;
begin
  hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hInter) then
    try
      Stream.Seek(0,0);
      GetMem(Buffer,BuffSize);
      try
          UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
          if Assigned(UrlHandle) then
          begin
            repeat
              InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
              if BytesRead>0 then
               Stream.WriteBuffer(Buffer^,BytesRead);
            until BytesRead = 0;
            InternetCloseHandle(UrlHandle);
          end;
      finally
        FreeMem(Buffer);
      end;
    finally
     InternetCloseHandle(hInter);
    end;
end;

function WinInet_HttpGet(const Url: string): string;overload;
Var
  StringStream : TStringStream;
begin
  Result:='';
    StringStream:=TStringStream.Create('');
    try
        WinInet_HttpGet(Url,StringStream);
        if StringStream.Size>0 then
        begin
          StringStream.Seek(0,0);
          Result:=StringStream.ReadString(StringStream.Size);
        end;
    finally
      StringStream.Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
    CoInitialize(nil);
    try
    showmessage(WinInet_HttpGet(Weather));
    finally
      CoUninitialize;
    end;
 except
    on E:Exception do
        Showmessage(E.Classname+#13+E.Message);
 end;
end;

end.
...
Рейтинг: 0 / 0
02.11.2017, 15:09:39
    #39546761
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
InternetOpenUrl завершается с ошибкой:
Адрес URL не использует поддерживаемый протокол

хочет в урле http://
...
Рейтинг: 0 / 0
02.11.2017, 15:51:28
    #39546794
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
Ghost WriterInternetOpenUrl завершается с ошибкой:
Адрес URL не использует поддерживаемый протокол

хочет в урле http://Пробовал и с хттп. До лампочки
...
Рейтинг: 0 / 0
02.11.2017, 15:53:03
    #39546795
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
LSVПробовал и с хттп.Может там https?

Проверяйте коды ошибок у всех функций
...
Рейтинг: 0 / 0
02.11.2017, 15:55:22
    #39546797
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
_Vasilisk_LSVПробовал и с хттп.Может там https?

Проверяйте коды ошибок у всех функцийТоже не прокатило.

офф: 30тыщ. намолотил :)
...
Рейтинг: 0 / 0
02.11.2017, 16:01:49
    #39546802
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
LSVТоже не прокатило.Что не прокатило? Функции ошибок не возвращают?
...
Рейтинг: 0 / 0
02.11.2017, 16:02:07
    #39546804
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
LSVПробовал и с хттп. До лампочкисконцентрируйся и попробуй еще раз )
...
Рейтинг: 0 / 0
02.11.2017, 16:05:27
    #39546806
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
https://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx Only URLs beginning with ftp:, http:, or https: are supported.
...
Рейтинг: 0 / 0
02.11.2017, 16:09:53
    #39546811
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
Ghost Writer https://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx Only URLs beginning with ftp:, http:, or https: are supported.Не помогает

// Функции ошибок не возвращают?

А как ловить ошибки ?
Срабатывает мгновенно (когда все нормально, то есть задержка) и без ошибок.
Просто пустой Showmesage.
...
Рейтинг: 0 / 0
02.11.2017, 16:13:19
    #39546814
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
Хм... Заработало. хз что это было.
Наверно где-то символ какой-то левый стоял. :)

Вопрос закрыт.
Спасибо всем участникам.
...
Рейтинг: 0 / 0
02.11.2017, 16:33:22
    #39546822
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов погодного API
LSVА как ловить ошибки ?

Открой для себя операторы присвоения и if.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызов погодного API / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]