مثال عن api ipinfo كنسول
#1
برمجته منذ مدة كبيرة
وجدته بالصدفة واردت مشاركته
PHP كود :
program Project2;

{
$APPTYPE CONSOLE}

uses
  WinInet
,
  Windows //,superobject
;

function 
GetUrlContent(const Url: string): UTF8String;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1023] of byte;
  BytesRead: dWord;
  StrBuffer: UTF8String;
begin
  Result 
:= '';
  NetHandle := InternetOpen('USER_AGENT', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
    
try
      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(UrlHandle) then
        
try
          repeat
            InternetReadFile
(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
            SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
            Result := Result + StrBuffer;
          until BytesRead = 0;
        finally
          InternetCloseHandle(UrlHandle);
        end
      
else
        Result:=('Cannot open URL '+ Url);
    finally
      InternetCloseHandle(NetHandle);
    end
  
else
    Result:=('Unable to initialize Wininet');
end;
var 
Content:UTF8String;
begin
Content
:=GetUrlContent('http://api.ipinfodb.com/v3/ip-city/?key=725b4fc2190b0ac507d281ea20b491e2d80e484a40e887cf05e32f796934168a&format=json') ;
Writeln(Content) ;
{
Writeln('------------------------------------------------------');
writeln('Country Name : '+so(Content)['countryName'].AsString) ;
writeln('Region Name : '+so(Content)['regionName'].AsString) ;
writeln('City Name : '+so(Content)['cityName'].AsString) ;
writeln('Zip Code : '+so(Content)['zipCode'].AsString) ;
writeln('Latitude : '+so(Content)['latitude'].AsString) ;
writeln('Longitude : '+so(Content)['longitude'].AsString) ;
writeln('Time Zone : '+so(Content)['timeZone'].AsString) ;
Writeln('------------------------------------------------------');  }
Readln
end
. 


الملفات المرفقة
.rar   Project2.rar (الحجم : 865 بايت / التحميلات : 46)
[-] كل من 4 users say قال شكرا ل onexite على المشاركة المفيدة
  • larbiparadox, delphi17, Rever7eR, haniid
الرد
#2
بارك للخ فيك على المجهودات و لكن الرابط لا يعمل في الملف المرفق و بوركت الجهود خويا
الرد
#3
السلام عليكم

نفس المثال لاكن باستعمال وحدات RESTRequest4D 

المثال يعمل على win + android

--------------
نعرف متغير لتنفيد api التى يوفرها الموقع يمكن التسجيل فى الموقع للحصول على your free api key
PHP كود :
BaseUrl: string; 
نضيف الوحدات لتنفيد الامر GET و قرائت المخرجات التى يقدمها الموقع
PHP كود :
uses RESTRequest4D, System.JSON, System.JSON.Readers; 

تنفيد الامر GET
كود :
function TForm18.ExecuteGet(sBaseUrl: string): string; var   LResponse: IResponse; begin   LResponse := TRequest.New.BaseURL(sBaseUrl)     .Accept('application/json')     .Get;   Result := LResponse.Content; end;

عند الحصول على json نستخرج المعلومات التى نريدها 
كود :
function TForm18.ExtractData(JSonData: string): TStringList; var   JSONValue: TJSONValue; begin   JSONValue := TJSONObject.ParseJSONValue(JSonData, False, False);   Result := TStringList.Create;   try     if JSONValue is TJSONArray then      //...     else if JSONVAlue is TJSONObject then     begin       Result.Add(JSONValue.GetValue<string>('statusCode'));       Result.Add(JSONValue.GetValue<string>('statusMessage'));       Result.Add(JSONValue.GetValue<string>('ipAddress'));       Result.Add(JSONValue.GetValue<string>('countryCode'));       Result.Add(JSONValue.GetValue<string>('countryName'));       Result.Add(JSONValue.GetValue<string>('regionName'));       Result.Add(JSONValue.GetValue<string>('cityName'));       Result.Add(JSONValue.GetValue<string>('zipCode'));       Result.Add(JSONValue.GetValue<string>('latitude'));       Result.Add(JSONValue.GetValue<string>('longitude'));       Result.Add(JSONValue.GetValue<string>('timeZone'));     end;   finally     JSONValue.Free;   end; end;

تنفيد العملية 
كود :
  Memo1.Lines := ExtractData(ExecuteGet(BaseUrl));


الملفات المرفقة
.zip   RESTRequest4Delphi-master.zip (الحجم : 916.38 ك ب / التحميلات : 25)
.rar   demo.rar (الحجم : 1.44 ك ب / التحميلات : 17)
[-] كل من 1 user says قال شكرا ل haniid على المشاركة المفيدة
  • takaya5
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم