Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WeatherAPI Delphi Senkronizasyonu
#1
Information 
Merhabalar, geçenlerde bir projeye başlamıştım tabi şu an askıda. Confused Askıda iken bende benim bilgisayarda duran ve geliştirmiş olduğum Weather.com'dan verileri çeken bir DLL vardı. Bunu sizinle paylaşmak isterim. Umarım faydalı bir paylaşım olur.

library WeatherAPI;

{ Author: HyperXMan
 Company: HyperSoftware
 Date: 17/06/2017 14:57

   NOTE: Thank you so much, my family.}


uses
 System.SysUtils,
 System.Classes,
 IdBaseComponent,
 IdComponent,
 IdTCPConnection,
 IdTCPClient,
 IdHTTP,
 Math,
 WeatherClass in 'WeatherClass.pas';

{$R *.res}


type
 TWeatherAPI = class(TInterfacedObject, WeatherAPIModule)
protected
   Function WTemperature(APIID: String; City: String): String;
   Function WForecast(APIID: String; City: String): String;
   Function Parse(text, sol, sag: string): String;
end;



function TWeatherAPI.Parse(text, sol, sag: string): String;    /// Function Author: Ali Zairov
begin
 Delete(text, 1, Pos(sol, text) + Length(sol) - 1);
 Result := Copy(text, 1, Pos(sag, text) - 1);
end;


Function TWeatherAPI.WTemperature(APIID: String; City: String): String;
var
 XML: TStringList;
 Http: TIdHTTP;
 Matematik: Real;
 Kelvin: String;
begin
 XML := TStringList.Create;
 Http := TIdHTTP.Create(Nil);
 XML.Text := Http.Get('http://api.openweathermap.org/data/2.5/weather?q='+City+'&mode=xml&appid='+APIID);
 Kelvin := Copy(Parse(XML.Strings[1], '<temperature value="', '"'), 0, 3);
 Matematik := StrToInt(Kelvin) - 273;
 Result := FloatToStr(Matematik);
end;


Function TWeatherAPI.WForecast(APIID: String; City: String): String;
var
 XML: TStringList;
 Http: TIdHTTP;
 HavaDurum: String;
begin
 XML := TStringList.Create;
 Http := TIdHTTP.Create(Nil);
 XML.Text := Http.Get('http://api.openweathermap.org/data/2.5/weather?q='+City+'&mode=xml&appid='+APIID);
 HavaDurum := Parse(XML.Strings[1], '<weather number="', '" icon="');
 Delete(HavaDurum, 1, 12);
 Result := HavaDurum;
end;


Function WeatherApp: WeatherAPIModule; stdcall; export;
begin
 Result := TWeatherAPI.Create;
end;


Exports WeatherApp;

begin
end.


 Kullanabileceğiniz fonksiyonlar;

WeatherApp.WTemperature(APINO, SehirAdı {(Türkçe karakter geçersizdir)}); //Sıcaklık derecesini verir
WeatherApp.WForecast(APINO, SehirAdi{Türkçe karakterler geçersiz}); //Hava durumunu ingilizce verir örn: cloudy
 

Ek olarak Linkleri Görebilmeniz İçin Giriş yap veya Üye Ollinkinde bulunan uses klasöründe bulunan dosyayı projenize ekleyip, kütüphane olarak belirtmeniz gerekmektedir.

NOT: Uğraştırıcı görünebilir eğer böyle düşünüyorsanız direkt fonksiyonu proje üzerinden çalıştırabilirsiniz tabi class tanımını silerek  Angel

Değerler verilen kelvin miktarından 273 (Kelvin) çıkarılarak verilmekte, %100 aynı sonucu vermiyor ama 1 - 2 derece bir fark var. İşimi görüyor şimdilik işi olanların kullanmasını isterim. 

Projemden bir gösterim:

jW8nOG.png


NOT: Yaşım çok fazla değil bu yüzden kod yazımında tecrübesizlikler olabilir  Sad

  Unutmadan Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol adresinden API numarası almanız gerekmektedir.

Saygılarımla
İyi çalışmalar  Wink
May the force be with you!
Cevapla
#2
Paylaşım için teşekkürler
There's no place like 127.0.0.1
WWW
Cevapla
#3
(06-07-2017, Saat: 09:36)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlPaylaşım için teşekkürler

Yardımcı olabildiysem birine, ne mutlu bana hocam Smile
May the force be with you!
Cevapla
#4
Alternatif bir çözüm için..

 uses REST.Client, System.JSON;

function OradaHavalarNasilGurbanOldugum(ApiKey, vilayet : String) : SmallInt;
Const
EndPoint = 'http://api.openweathermap.org/data/2.5/weather?q=%s&mode=json&appid=%s';
var
RestResponse : TRESTResponse;
RESTClient   : TRESTClient;
RESTRequest  : TRESTRequest;
JsonObject   : TJSONObject;
begin
Result := 0;
if (ApiKey.Trim = '') or (vilayet.Trim = '') then
 exit;

RestResponse := TRESTResponse.Create(Nil);
RestResponse.ContentType := 'application/json';

RESTClient := TRESTClient.Create(Format(EndPoint, [Vilayet, ApiKey]));
RESTClient.HandleRedirects := True;
RESTClient.RaiseExceptionOn500 := False;

RESTRequest := TRESTRequest.Create(nil);
RESTRequest.Response := RestResponse;
RESTRequest.Client := RESTClient;

try
  try
   RESTRequest.Execute;
  except on E: Exception do
    ShowMessage('Bir şeyler ters gitti :( ' + sLineBreak + E.Message );
  end;
finally
 if RestResponse.Status.SuccessOK_200 then
 begin
  RestResponse.RootElement := 'main';
  JsonObject := RestResponse.JSONValue as TJSONObject;
  Result := Round(StrToFloat(JsonObject.Values['temp'].Value) -273);
 end;

 FreeAndNil(RESTRequest);
 FreeAndNil(RESTClient);
 FreeAndNil(RestResponse);
end;
end;

Kullanımı 
var
  dwHavaDurumu : SmallInt;
begin
  dwHavaDurumu := OradaHavalarNasilGurbanOldugum('<siteden alınan beleş api key>', '<vilayet adı>');
end;
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
(07-07-2017, Saat: 11:53)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlAlternatif bir çözüm için..

 uses REST.Client, System.JSON;

function OradaHavalarNasilGurbanOldugum(ApiKey, vilayet : String) : SmallInt;
Const
EndPoint = 'http://api.openweathermap.org/data/2.5/weather?q=%s&mode=json&appid=%s';
var
RestResponse : TRESTResponse;
RESTClient   : TRESTClient;
RESTRequest  : TRESTRequest;
JsonObject   : TJSONObject;
begin
Result := 0;
if (ApiKey.Trim = '') or (vilayet.Trim = '') then
 exit;

RestResponse := TRESTResponse.Create(Nil);
RestResponse.ContentType := 'application/json';

RESTClient := TRESTClient.Create(Format(EndPoint, [Vilayet, ApiKey]));
RESTClient.HandleRedirects := True;
RESTClient.RaiseExceptionOn500 := False;

RESTRequest := TRESTRequest.Create(nil);
RESTRequest.Response := RestResponse;
RESTRequest.Client := RESTClient;

try
  try
   RESTRequest.Execute;
  except on E: Exception do
    ShowMessage('Bir şeyler ters gitti Sad ' + sLineBreak + E.Message );
  end;
finally
 if RestResponse.Status.SuccessOK_200 then
 begin
  RestResponse.RootElement := 'main';
  JsonObject := RestResponse.JSONValue as TJSONObject;
  Result := Round(StrToFloat(JsonObject.Values['temp'].Value) -273);
 end;

 FreeAndNil(RESTRequest);
 FreeAndNil(RESTClient);
 FreeAndNil(RestResponse);
end;
end;

Kullanımı 
var
  dwHavaDurumu : SmallInt;
begin
  dwHavaDurumu := OradaHavalarNasilGurbanOldugum('<siteden alınan beleş api key>', '<vilayet adı>');
end;
Ustalık farkı  Smile
May the force be with you!
Cevapla
#6
(07-07-2017, Saat: 14:09)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(07-07-2017, Saat: 11:53)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlAlternatif bir çözüm için..

 uses REST.Client, System.JSON;

function OradaHavalarNasilGurbanOldugum(ApiKey, vilayet : String) : SmallInt;
Const
EndPoint = 'http://api.openweathermap.org/data/2.5/weather?q=%s&mode=json&appid=%s';
var
RestResponse : TRESTResponse;
RESTClient   : TRESTClient;
RESTRequest  : TRESTRequest;
JsonObject   : TJSONObject;
begin
Result := 0;
if (ApiKey.Trim = '') or (vilayet.Trim = '') then
 exit;

RestResponse := TRESTResponse.Create(Nil);
RestResponse.ContentType := 'application/json';

RESTClient := TRESTClient.Create(Format(EndPoint, [Vilayet, ApiKey]));
RESTClient.HandleRedirects := True;
RESTClient.RaiseExceptionOn500 := False;

RESTRequest := TRESTRequest.Create(nil);
RESTRequest.Response := RestResponse;
RESTRequest.Client := RESTClient;

try
  try
   RESTRequest.Execute;
  except on E: Exception do
    ShowMessage('Bir şeyler ters gitti Sad ' + sLineBreak + E.Message );
  end;
finally
 if RestResponse.Status.SuccessOK_200 then
 begin
  RestResponse.RootElement := 'main';
  JsonObject := RestResponse.JSONValue as TJSONObject;
  Result := Round(StrToFloat(JsonObject.Values['temp'].Value) -273);
 end;

 FreeAndNil(RESTRequest);
 FreeAndNil(RESTClient);
 FreeAndNil(RestResponse);
end;
end;

Kullanımı 
var
  dwHavaDurumu : SmallInt;
begin
  dwHavaDurumu := OradaHavalarNasilGurbanOldugum('<siteden alınan beleş api key>', '<vilayet adı>');
end;
Ustalık farkı  Smile

Yok kardeş ustalıktan dolayı değil. Yeni gelen özellikleri de kullanmak, kullandırmak gerekir.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#7
(07-07-2017, Saat: 14:15)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(07-07-2017, Saat: 14:09)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlUstalık farkı  Smile

Yok kardeş ustalıktan dolayı değil. Yeni gelen özellikleri de kullanmak, kullandırmak gerekir.

  Doğrusunuz hocam  Shy
May the force be with you!
Cevapla
#8
"Yiğitlerin yoğurt yiyişleri farklı" diyelim Wink
There's no place like 127.0.0.1
WWW
Cevapla
#9
(07-07-2017, Saat: 14:46)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol"Yiğitlerin yoğurt yiyişleri farklı" diyelim Wink

Big Grin Big Grin Big Grin
May the force be with you!
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi Chromium Tabanlı Browser SimaWB 0 197 29-01-2018, Saat: 17:36
Son Yorum: SimaWB
  Awesome Delphi SimaWB 3 354 13-12-2017, Saat: 11:07
Son Yorum: frmman
  DSTL - Delphi Standard Template Library ismailkocacan 0 296 03-11-2017, Saat: 16:00
Son Yorum: ismailkocacan
  Delphi yararlı kaynaklar AliZairov 0 566 02-04-2017, Saat: 13:38
Son Yorum: AliZairov



Konuyu Okuyanlar: 1 Ziyaretçi