{"id":123,"date":"2012-09-26T00:09:34","date_gmt":"2012-09-25T21:09:34","guid":{"rendered":"http:\/\/phpax.wordpress.com\/?p=123"},"modified":"2020-05-12T23:09:03","modified_gmt":"2020-05-12T20:09:03","slug":"php-ile-last-fm-api-kullanimi","status":"publish","type":"post","link":"https:\/\/guvensahin.com\/tr\/php-ile-last-fm-api-kullanimi\/","title":{"rendered":"PHP ile Last.fm API kullan\u0131m\u0131"},"content":{"rendered":"<p><a href=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/www-lastfm-com.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-135\" title=\"www.lastfm.com\" src=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/www-lastfm-com.png\" alt=\"\" width=\"128\" height=\"44\" \/><\/a>Bu yaz\u0131mda php ile beraber <a href=\"http:\/\/www.lastfm.com.tr\/api\">lastfm api<\/a>&#8216;yi nas\u0131l kullabilece\u011fimizi anlataca\u011f\u0131m. Beraber api&#8217;nin bir method&#8217;una parametre g\u00f6nderip, api&#8217;den d\u00f6nen cevab\u0131 i\u015fleyerek ekrana \u00e7\u0131kt\u0131layaca\u011f\u0131z. Bu yaz\u0131 her ne kadar lastfm api&#8217;ye yo\u011funla\u015facak olsada di\u011fer <a href=\"http:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer\">REST<\/a> servislerinin \u00e7a\u011fr\u0131l\u0131\u015f\u0131 ve kullan\u0131m\u0131 da bu yaz\u0131da anlat\u0131lacaklarla olduk\u00e7a benzerlik ta\u015f\u0131r.<\/p>\n<p>Ben bu yaz\u0131da \u00f6rnek olarak <strong>artist.getinfo<\/strong> methodunu kullanaca\u011f\u0131m. K\u0131saca a\u00e7\u0131klamak gerekirse bu method ismini yazd\u0131\u011f\u0131m\u0131z sanat\u00e7\u0131n\u0131n lastfm&#8217;deki biyografisini, 5 farkl\u0131 ebattaki resmini, bu sanat\u00e7\u0131ya m\u00fczikal anlamda en \u00e7ok benzeyen 5 sanat\u00e7\u0131y\u0131, sanat\u00e7\u0131n\u0131n yapt\u0131\u011f\u0131 m\u00fczik t\u00fcr\u00fcn\u00fc vb olmak \u00fczere pek \u00e7ok bilgiyi getiriyor. <a href=\"http:\/\/www.lastfm.com.tr\/api\/show\/artist.getInfo\">\u015eu adresten<\/a> de bakacak olursan\u0131z ilgili method&#8217;un sayfada \u00f6rnek bir kullan\u0131m\u0131 mevcut.<\/p>\n<p>Ayr\u0131ca isterseniz lastfm api&#8217;nin sahip oldu\u011fu methodlar\u0131n tamam\u0131na <a href=\"http:\/\/www.lastfm.com.tr\/api\">bu adresten<\/a> bakabilirsiniz.<\/p>\n<h2>Ba\u015fl\u0131yoruz<\/h2>\n<p>A\u015fa\u011f\u0131daki linki taray\u0131c\u0131n\u0131z\u0131n adres sat\u0131r\u0131na kopyalay\u0131p yap\u0131\u015ft\u0131rarak ilk denememize ba\u015flayal\u0131m.<\/p>\n<p><!--more--><\/p>\n<pre>http:\/\/ws.audioscrobbler.com\/2.0\/?method=artist.getinfo&artist=Evanescence&api_key=b25b959554ed76058ac220b7b2e0a026<\/pre>\n<p>D\u00f6nen sonu\u00e7 a\u015fa\u011f\u0131daki \u015fekilde olacakt\u0131r.<\/p>\n<pre>\n<lfm status=\"ok\">\n<artist>\n  <name>Evanescence<\/name>\n          <mbid>f4a31f0a-51dd-4fa7-986d-3095c40c5ed9<\/mbid>\n        <url>http:\/\/www.last.fm\/music\/Evanescence<\/url>\n  <image size=\"small\">http:\/\/userserve-ak.last.fm\/serve\/34\/66988044.png<\/image>\n  <image size=\"medium\">http:\/\/userserve-ak.last.fm\/serve\/64\/66988044.png<\/image>\n  <image size=\"large\">http:\/\/userserve-ak.last.fm\/serve\/126\/66988044.png<\/image>\n  <image size=\"extralarge\">http:\/\/userserve-ak.last.fm\/serve\/252\/66988044.png<\/image>\n  <image size=\"mega\">http:\/\/userserve-ak.last.fm\/serve\/500\/66988044\/Evanescence+Sem+ttulo+1.png<\/image>\n  <streamable>1<\/streamable>\n  <stats>\n    <listeners>1972008<\/listeners>\n    <playcount>82436313<\/playcount>\n      <\/stats>\n...\n...\n...\n<\/pre>\n<p>Taray\u0131c\u0131m\u0131za yap\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z linkte belirli parametreler bulunmakta. dikkatlice incelersek:<\/p>\n<p><strong>http:\/\/ws.audioscrobbler.com\/2.0\/<\/strong><\/p>\n<p>Bu adres lastfm api kullan\u0131rken kullanaca\u011f\u0131m\u0131z standart ifade. parametrelerimizin gitti\u011fi adres.<\/p>\n<p>method=<strong>artist.getinfo<\/strong><\/p>\n<p>Lastfm&#8217;in <a href=\"http:\/\/www.lastfm.com.tr\/api\/show\/artist.getInfo\">Artist.getInfo<\/a> method&#8217;unu kullanaca\u011f\u0131m\u0131z\u0131 ve bu method&#8217;a parametre g\u00f6nderece\u011fimizi belirtiyoruz.<\/p>\n<p>artist=<strong>Evanescence<\/strong><\/p>\n<p>Bilgilerini g\u00f6r\u00fcnt\u00fclemek istedi\u011fimiz sanat\u00e7\u0131n\u0131n ismi.<\/p>\n<p>api_key=<strong>b25b959554ed76058ac220b7b2e0a026<\/strong><\/p>\n<p>Koyu alan lastfm&#8217;in \u015fu an api sayfas\u0131nda deneme ama\u00e7l\u0131 herkese a\u00e7\u0131k olarak sundu\u011fu api key. Bu api&#8217;yi kullanmak tamamen \u00fccretsiz oldu\u011fu i\u00e7in <a href=\"http:\/\/www.last.fm\/join\">\u00fcye olup<\/a> kendinize ait bir api key&#8217;de olu\u015fturabilirsiniz. Bu sayede <a href=\"http:\/\/www.lastfm.com.tr\/api\/webauth\">authentication<\/a> gereken method&#8217;lar\u0131 kullanabilir ve api&#8217;nizin kullan\u0131m istatistiklerini izleyebilirsiniz.<\/p>\n<p>Methodumuzun sayfas\u0131nda g\u00f6rece\u011fimiz \u00fczere ba\u015fka parametrelerde alabiliyor.<\/p>\n<p><a href=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fcwv.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-124\" title=\"FCWv\" src=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fcwv.png\" alt=\"\" width=\"625\" height=\"167\" srcset=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fcwv.png 711w, https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fcwv-300x80.png 300w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u00d6rne\u011fin taray\u0131c\u0131m\u0131zdaki linkin sonuna <strong>lang=tr<\/strong> eklersek methodumuz bize sonu\u00e7lar\u0131 t\u00fcrk\u00e7e olarak d\u00f6nd\u00fcrecektir.<\/p>\n<pre>http:\/\/ws.audioscrobbler.com\/2.0\/?method=artist.getinfo&artist=Evanescence&api_key=b25b959554ed76058ac220b7b2e0a026&lang=tr<\/pre>\n<h2>Peki ya PHP ?<\/h2>\n<p>Buraya kadar size api&#8217;yi ve \u00f6rnek methodumuzu \u00e7ok basit\u00e7e tan\u0131tt\u0131m. \u015eimdi s\u0131ra bu d\u00f6nen sonu\u00e7lar\u0131 php ile i\u015flemeye geldi. \u00d6ncelikle api standart olarak sonu\u00e7lar\u0131 XML format\u0131nda getirmekte. Fakat parametrelere yani linkimizin sonuna <strong>format=json<\/strong> ifadesini eklersek sonu\u00e7lar\u0131 JSON olarakda getirebiliriz.<\/p>\n<pre>http:\/\/ws.audioscrobbler.com\/2.0\/?method=artist.getinfo&artist=Evanescence&api_key=b25b959554ed76058ac220b7b2e0a026&lang=tr&format=json<\/pre>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek kodlar\u0131 kaydedip, direk \u00e7al\u0131\u015ft\u0131rarak kullanabilirsiniz. Her kod blo\u011funun ba\u015f\u0131na koydu\u011fum comment&#8217;lerden kodlar\u0131n ne yapt\u0131\u011f\u0131n\u0131 rahatl\u0131kla anlayabilirsiniz. K\u0131saca bahsetmek gerekirse api&#8217;den sonu\u00e7lar\u0131 <a href=\"http:\/\/php.net\/manual\/tr\/function.file-get-contents.php\">file_get_contents<\/a> ile XML format\u0131nda al\u0131p php&#8217;nin <a href=\"http:\/\/php.net\/manual\/en\/book.simplexml.php\">SimpleXML<\/a> class&#8217;\u0131ndan t\u00fcreyen <a href=\"http:\/\/php.net\/manual\/en\/function.simplexml-load-string.php\">simplexml_load_string<\/a> fonksiyonuyla i\u015fliyoruz. Ard\u0131ndan sonu\u00e7lar\u0131 bir diziye kaydedip ekrana \u00e7\u0131kt\u0131l\u0131yoruz.<\/p>\n<pre class=\"lang:php decode:true\">\n<?php\n\/**\n * yazar            G\u00fcven \u015eAH\u0130N <guven.sahin@outlook.com>\n * web              http:\/\/guven.kimdir.com\n * son g\u00fcncelleme   25 Eyl\u00fcl 2012\n *\/\n\n\/\/ ge\u00e7erli bir html belgesi olmad\u0131\u011f\u0131 i\u00e7in karakter setini ayarl\u0131yoruz\nheader('Content-Type:text\/html; charset=utf-8');\n\n\/\/ ilk olarak api'ye istedi\u011fimizi yap\u0131yoruz ve sonu\u00e7lar\u0131 al\u0131yoruz.\n$path = 'http:\/\/ws.audioscrobbler.com\/2.0\/?method=artist.getinfo&artist=Evanescence&api_key=b25b959554ed76058ac220b7b2e0a026&lang=tr';\n$data = file_get_contents($path);\n\n\/\/ api'den sonu\u00e7lar\u0131 al\u0131p almad\u0131\u011f\u0131m\u0131z\u0131 kontrol ediyoruz\nif (!$data)\n{\n    die(\"api'ye ula\u015f\u0131lam\u0131yor.\");\n}\n\n\/\/ php'nin simplexml s\u0131n\u0131f\u0131n\u0131 kullanarak d\u00f6nen xml sonu\u00e7lar\u0131 parse ediyoruz\n$xml = simplexml_load_string($data);\n\n\/\/ simplexml'in \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol ediyoruz\nif (!$xml)\n{\n    die(\"api'den d\u00f6nen sonu\u00e7lar ge\u00e7erli bir xml verisi de\u011fil.\");\n}\n\n\/\/ d\u00f6nen sonu\u00e7lar\u0131 i\u015fliyoruz\n$artist['name']       = (string) $xml->artist->name;\n$artist['mbid']       = (string) $xml->artist->mbid;\n$artist['match']      = (string) $xml->artist->match;\n$artist['url']        = (string) $xml->artist->url;\n$artist['small']      = (string) $xml->artist->image[0];\n$artist['medium']     = (string) $xml->artist->image[1];\n$artist['large']      = (string) $xml->artist->image[2];\n$artist['extralarge'] = (string) $xml->artist->image[3];\n$artist['mega']       = (string) $xml->artist->image[4];\n\n\/\/ biyofrafi bilgisi her sanat\u00e7\u0131da olmayabilece\u011fi i\u00e7in diziye atamadan \u00f6nce kontrol ediyoruz.\nif (!empty($xml->artist->bio->summary))\n{\n    $artist['bio'] = strip_tags($xml->artist->bio->summary);\n}\n\n\/\/ \u015fimdi sonu\u00e7lar\u0131 ekrana \u00e7\u0131kt\u0131l\u0131yoruz\necho '';\necho $artist['name'] . '<br \/>';\necho $artist['url'];\necho '<\/p>';\n\necho '<img src='.$artist['large'].' \/>' . '<br \/>';\n\nif (isset($artist['bio']))\n{\n    echo '<p>' . $artist['bio'] . '<\/p>';\n}\n\n?>\n<\/pre>\n<p>Sayfay\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda g\u00f6r\u00fcn\u00fcm\u00fc a\u015fa\u011f\u0131daki \u015fekilde olacakt\u0131r.<\/p>\n<p><a href=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fd9n.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-127\" title=\"FD9n\" src=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fd9n.png\" alt=\"\" width=\"466\" height=\"450\" srcset=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fd9n.png 466w, https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2012\/09\/fd9n-300x290.png 300w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/a><\/p>\n<p>\u00d6rnek olarak yazd\u0131\u011f\u0131m bu kodu ilk defa api (web servis) kullanacak arkada\u015flar olabilece\u011fi i\u00e7in olduk\u00e7a basite indirgedim. \u0130stedi\u011finiz method ve g\u00f6nderece\u011finiz parametreler de\u011fi\u015fece\u011fi i\u00e7in siz ihtiyac\u0131n\u0131z olaca\u011f\u0131 \u015fekilde daha mod\u00fcler hale getirip kullanabilirsiniz.<\/p>\n<p>Son olarak \u00f6rnek kodu <a href=\"https:\/\/guvensahin.com\/tr\/wp-content\/uploads\/2015\/03\/lastfm.zip\">buradan<\/a> indirebilir, isterseniz de lastfm api kullanarak geli\u015ftirmi\u015f oldu\u011fum uygulamam\u0131 <a href=\"http:\/\/benzersanatci.guvensahin.com\/\">\u015fu adresten<\/a> inceleyebilirsiniz.<\/p>\n<p>Ho\u015f\u00e7akal\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda php ile beraber lastfm api&#8216;yi nas\u0131l kullabilece\u011fimizi anlataca\u011f\u0131m. Beraber api&#8217;nin bir method&#8217;una parametre g\u00f6nderip, api&#8217;den d\u00f6nen cevab\u0131 i\u015fleyerek ekrana \u00e7\u0131kt\u0131layaca\u011f\u0131z. Bu yaz\u0131 her ne kadar lastfm api&#8217;ye yo\u011funla\u015facak olsada di\u011fer REST servislerinin \u00e7a\u011fr\u0131l\u0131\u015f\u0131 ve kullan\u0131m\u0131 da bu yaz\u0131da anlat\u0131lacaklarla olduk\u00e7a benzerlik ta\u015f\u0131r. Ben bu yaz\u0131da \u00f6rnek olarak artist.getinfo methodunu kullanaca\u011f\u0131m. K\u0131saca a\u00e7\u0131klamak gerekirse&hellip;&nbsp;<a href=\"https:\/\/guvensahin.com\/tr\/php-ile-last-fm-api-kullanimi\/\" rel=\"bookmark\">Daha fazlas\u0131n\u0131 oku &raquo;<span class=\"screen-reader-text\">PHP ile Last.fm API kullan\u0131m\u0131<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[239],"tags":[210,214,415],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","category-programlama","tag-lastfm","tag-php-2","tag-web-service"],"_links":{"self":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":3,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":1692,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/posts\/123\/revisions\/1692"}],"wp:attachment":[{"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guvensahin.com\/tr\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}