C# - API Kullanımı

Bu konuyu okuyanlar

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
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

Müdavim
Katılım
8 Şubat 2014
Mesajlar
8,486
Çözümler
3
Reaksiyon puanı
3,709
Puanları
113
Bunlar belki daha açıklayıcı olabilir :
 

ertan2002

Asistan
Katılım
9 Aralık 2008
Mesajlar
346
Reaksiyon puanı
112
Puanları
43
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

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
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 Aralık 2008
Mesajlar
346
Reaksiyon puanı
112
Puanları
43
Son düzenleme:

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
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 Aralık 2008
Mesajlar
346
Reaksiyon puanı
112
Puanları
43
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

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
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

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
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
 

ozmen_celik

Software Developer
Katılım
3 Mart 2012
Mesajlar
571
Reaksiyon puanı
318
Puanları
63
Yaş
39
Bak sana tavsiyem json2csharp.com mu ne vardı ondan da yararlan son yapısını sana class dönüştürüyor zaten gerisi webclient + methodlara kalıyor

ayrıca online son editör ve onuda arada kullanabilirsin.
 
Üst