C# - API Kullanımı

Şu anda konuyu okuyanlar (Üyeler: 1, Ziyaretçi & Botlar: 0)


Samet UCA

.Net Geliştiricisi
Katılım
3 Ağu 2012
Mesajlar
1,985
Puanları
113
Konum
İstanbul
ASP.NET üzerinden geliştireceğim bir projede film apisi kullanmak istiyorum. Apiyi sağlayan site OMDb API - The Open Movie Database Sitenin tasarımı ve gelebilecek verilere göre model sınıfı oluşturdum. Ancak bu sitede ki apiyi nasıl kullanabilirim bilmiyorum. Örnek olarak textboxa bir film ismi girilecek ve girilen film ile ilgili bilgilerin diğer kutucuklara gelmesini istiyorum. İnternet üzerinden yapmış olduğum araştırmalarda çok karışık kaynaklara ulaşıp anlamayadım. Yardımcı olabilirseniz çok sevinirim.
 

kmurat

Dekan
Katılım
8 Şub 2014
Mesajlar
5,231
Puanları
113
Bunlar belki daha açıklayıcı olabilir :
 

ertan2002

Asistan
Katılım
9 Ara 2008
Mesajlar
250
Puanları
28
aradigin sey cok zor bir sey degil hocam, sanirim yanlis kelimelerle arama yaptin. "web service consumer in C#" gibi arama yapsaydin daha net sonuclara ulasabilirdin. Neyse ziyani yok, senin icin basit bir demo yaptim..

Kisaca anlatayim; simdi bu webservice restful bir webservis, yani post, get, put gibi komutlarla islem yapabilirsin. Bize get methodu verdikleri icin biz de get üzerinden gidecegiz. Ancak bize bir tane api key lazim. (ben bi tane demo olusturdum). bunun yaninda cesitli parametreler vermemiz lazim. Restful oldugu icin ve get oldugu icin aslinda url yi browser da calistirabilirsin.. Mesela ben "one piece" filmini aratmak istiyorum

o zaman url im söyle olacak:
http://www.omdbapi.com/?i=tt3896198&apikey=b732dcf2&s=one piece&type=movie

s= kismi zorunlu cünkü buradan arayacagin filmi vermen lazim., type kismi zorunlu degil ama ben elemek icin movie yazdim (tüm secenekler movie, series, episode), baska türlü parametreler de var. mesela json degil de xml istiyorsan type=movie&r=xml yazabilirsin..

Simdi sonuca göre iki tane model olusturdum.

FilmInfo classim

C#:
     public class FilmInfo
    {
      
        public string Title {get;set;}

        public string Year{ get; set; }

        public string ImdbID{ get; set; }

        public string Type{ get; set; }

        public string Poster{ get; set; }
    }
Bu da benim searchmodel classim

C#:
    public class SearchModel
    {
        public List<FilmInfo> Search {get; set;}
    
        public int TotalResults { get; set; }

        public bool Response { get; set; }
    }
Bu da benim consumer kodum (console da yaptim ancak basitce asp.net e cevirebilirsin, zaten yazdim bi kac sey)

C#:
using System.Net;
using Newtonsoft.Json;

namespace WebApiConsumer
{ 
    class Program
    {
        static void Main(string[] args)
        {
           var result=  GetReleases("http://www.omdbapi.com/?i=tt3896198&apikey=b732dcf2&s=one%20piece&type=movie");
            SearchModel  model = JsonConvert.DeserializeObject<SearchModel>(result);
        }

        public static string GetReleases(string url)
        {
            var client = new WebClient();
            // client.Headers.Add(RequestConstants.UserAgent, RequestConstants.UserAgentValue);  // <<=asp.net ile yapacagin zaman bunu kullan
            client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");

            var response = client.DownloadString(url);

            return response;
        }
     }  
}

Gördügün gibi json deserialize islemi yaptim, bunun icin de Newtonsoft.Json kütüphanesini kullandim. nuget package manager den indirirsin..

model objesi, bana film sayisini ve tüm film bilgilerini (model'deki search objesinde) verecek.
örnek:

65880




umarim faydali olur,
ertan
 

Samet UCA

.Net Geliştiricisi
Katılım
3 Ağu 2012
Mesajlar
1,985
Puanları
113
Konum
İstanbul
aradigin sey cok zor bir sey degil hocam, sanirim yanlis kelimelerle arama yaptin. "web service consumer in C#" gibi arama yapsaydin daha net sonuclara ulasabilirdin. Neyse ziyani yok, senin icin basit bir demo yaptim..

Kisaca anlatayim; simdi bu webservice restful bir webservis, yani post, get, put gibi komutlarla islem yapabilirsin. Bize get methodu verdikleri icin biz de get üzerinden gidecegiz. Ancak bize bir tane api key lazim. (ben bi tane demo olusturdum). bunun yaninda cesitli parametreler vermemiz lazim. Restful oldugu icin ve get oldugu icin aslinda url yi browser da calistirabilirsin.. Mesela ben "one piece" filmini aratmak istiyorum

o zaman url im söyle olacak:
http://www.omdbapi.com/?i=tt3896198&apikey=b732dcf2&s=one piece&type=movie

s= kismi zorunlu cünkü buradan arayacagin filmi vermen lazim., type kismi zorunlu degil ama ben elemek icin movie yazdim (tüm secenekler movie, series, episode), baska türlü parametreler de var. mesela json degil de xml istiyorsan type=movie&r=xml yazabilirsin..

Simdi sonuca göre iki tane model olusturdum.

FilmInfo classim

C#:
     public class FilmInfo
    {
     
        public string Title {get;set;}

        public string Year{ get; set; }

        public string ImdbID{ get; set; }

        public string Type{ get; set; }

        public string Poster{ get; set; }
    }
Bu da benim searchmodel classim

C#:
    public class SearchModel
    {
        public List<FilmInfo> Search {get; set;}
   
        public int TotalResults { get; set; }

        public bool Response { get; set; }
    }
Bu da benim consumer kodum (console da yaptim ancak basitce asp.net e cevirebilirsin, zaten yazdim bi kac sey)

C#:
using System.Net;
using Newtonsoft.Json;

namespace WebApiConsumer
{
    class Program
    {
        static void Main(string[] args)
        {
           var result=  GetReleases("http://www.omdbapi.com/?i=tt3896198&apikey=b732dcf2&s=one%20piece&type=movie");
            SearchModel  model = JsonConvert.DeserializeObject<SearchModel>(result);
        }

        public static string GetReleases(string url)
        {
            var client = new WebClient();
            // client.Headers.Add(RequestConstants.UserAgent, RequestConstants.UserAgentValue);  // <<=asp.net ile yapacagin zaman bunu kullan
            client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");

            var response = client.DownloadString(url);

            return response;
        }
     } 
}

Gördügün gibi json deserialize islemi yaptim, bunun icin de Newtonsoft.Json kütüphanesini kullandim. nuget package manager den indirirsin..

model objesi, bana film sayisini ve tüm film bilgilerini (model'deki search objesinde) verecek.
örnek:

Ekli dosyayı görüntüle 65880



umarim faydali olur,
ertan
Çok teşekkür ederim. Bu anlatım işime yaradı.
 

ertan2002

Asistan
Katılım
9 Ara 2008
Mesajlar
250
Puanları
28
Son düzenleme:

Samet UCA

.Net Geliştiricisi
Katılım
3 Ağu 2012
Mesajlar
1,985
Puanları
113
Konum
İstanbul
Rica ederim. Simdi farkettim. Linkte i=tt3896198 gibi bir ifade kalmis (kopyalarken). Onu silebilirsin. Oraya istersen imdb idsi verebilirsin yani söyle kullanabilirsin



Ekli dosyayı görüntüle 65888



gördügün gibi verdigin id den dönen cevaplar daha fazla. Yani bir filmden daha fazla detay almak icin kullanabilirsin.
Kolay gelsin
Hocam son bir soru olarak posteri nasıl çekebiliriz bir pictureboxa?
 

ertan2002

Asistan
Katılım
9 Ara 2008
Mesajlar
250
Puanları
28
Isteyim hocam pek bakamiyorum.

Su sekil yapabilirsin (mvc icin)

<img src="@Html.Raw(model[0].ImageUrl)" alt="info"> (model[0] calisir mi emin degilim)



diger türlü söyle yapabilirsin

WebClient webClient = new WebClient();
webClient.DownloadFile(model[0].Poster, "file.jpg");


daha sonra resmi base64 e cevirip asagidaki gibi gösterebilirsin web form icin

img.ImageUrl = "data:image/jpg;base64," + base64String
 

Samet UCA

.Net Geliştiricisi
Katılım
3 Ağu 2012
Mesajlar
1,985
Puanları
113
Konum
İstanbul
Isteyim hocam pek bakamiyorum.

Su sekil yapabilirsin (mvc icin)

<img src="@Html.Raw(model[0].ImageUrl)" alt="info"> (model[0] calisir mi emin degilim)



diger türlü söyle yapabilirsin

WebClient webClient = new WebClient();
webClient.DownloadFile(model[0].Poster, "file.jpg");


daha sonra resmi base64 e cevirip asagidaki gibi gösterebilirsin web form icin

img.ImageUrl = "data:image/jpg;base64," + base64String
Teşekkür ederim hocam uğraşınız için
 

Samet UCA

.Net Geliştiricisi
Katılım
3 Ağu 2012
Mesajlar
1,985
Puanları
113
Konum
İstanbul
Biraz değişiklikler yaparak ve lazım olan eklemeleri tamamladığımda projem çalışır hale geldi.
Bundan sonra jquery ve ajax üzerinden aynı projeyi geliştirmeye çalışacağım.

66075
 
Üst
stat counter