powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызов погодного API
11 сообщений из 11, страница 1 из 1
Вызов погодного API
    #39546693
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил смеха ради зачитать погодный 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
Вызов погодного API
    #39546761
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InternetOpenUrl завершается с ошибкой:
Адрес URL не использует поддерживаемый протокол

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

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

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

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

офф: 30тыщ. намолотил :)
...
Рейтинг: 0 / 0
Вызов погодного API
    #39546802
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVТоже не прокатило.Что не прокатило? Функции ошибок не возвращают?
...
Рейтинг: 0 / 0
Вызов погодного API
    #39546804
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVПробовал и с хттп. До лампочкисконцентрируйся и попробуй еще раз )
...
Рейтинг: 0 / 0
Вызов погодного API
    #39546806
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.
...
Рейтинг: 0 / 0
Вызов погодного API
    #39546811
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызов погодного API
    #39546814
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Заработало. хз что это было.
Наверно где-то символ какой-то левый стоял. :)

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

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


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