Java ile IMDB’den film bilgisi almak
Her şey harici diskte yer açmaya çalışmakla başladı : ) Önceleri adından gözüme kestirdiğim, şöyle basmakalıp Hollywood aksiyon veya romantik komedi türü filmleri imdb’de bir göz attıktan sonra siliyordum. Sonraları bu iş can sıkıcı olmaya başladı. Yok mudur bunun bir API’si, topluca bulayım bu filmleri de külliyen uçurayım kellerini falan diye bakmaya başladım. Nihayetinde eli yüzü düzgün, inciği boncuğu olmayan bir servis buldum. Şurada sunulan servis ile ilgili linke film adı ve/veya yılını parametre olarak geçtiğinizde film bilgileri json formatında bir nesne olarak dönüyor. Geriye json formatındaki bu nesneyi ayrıştırmak kalıyor. Bunun için de halihazırda API’ler mevcut.
Şöyle ki;
package com.imdbInfo.base; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; public class BasicTest { private static final String BASIC_API_URL = "http://www.imdbapi.com/?"; private static final String TITLE_PARAM = "t="; @SuppressWarnings("unused") private static final String YEAR_PARAM = "&y="; public static void main(String[] args) { try { String titleToSearch = URLEncoder.encode("Forrest Gump","UTF-8"); String text = getJSONStringOf(BASIC_API_URL + TITLE_PARAM + titleToSearch); JSONObject jSonObject = (JSONObject) JSONSerializer.toJSON(text); String title = jSonObject.getString("Title"); int year = jSonObject.getInt("Year"); int votes = jSonObject.getInt("Votes"); double rating = jSonObject.getDouble("Rating"); String genre = jSonObject.getString("Genre"); //Runtime, Director vs. System.out.println("Title:" + title + "\nYear:" + year + "\nVotes:" + votes + "\nRating:" + rating + "\nGenre:" + genre); } catch (Exception e) { //Movie not found ! e.printStackTrace(); } } public static String getJSONStringOf(String urlSpec) throws Exception { URL url = new URL(urlSpec); URLConnection connection = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line = ""; StringBuilder builder = new StringBuilder(); while ((line = reader.readLine()) != null) { builder.append(line); } return builder.toString(); } }
Title:Forrest Gump
Year:1994
Votes:325985
Rating:8.6
Genre:Drama, Romance
diyerek filmin bilgilerini almış oluyoruz. Bunların içinde film adı, yapım yılı, türü, kullanılan oy sayısı, puan, yönetmen, oyuncular, süre ve sair filmle ilgili bir sürü bilgi bulunuyor.
Bundan sonra eldeki filmleri bu servisten alınan bilgiye göre sınıflandırmak kalıyor. Ki işin keyifli kısmı da orası : ) Yalnız şunu belirtmemde fayda var. Bu servisin elindeki veri imdb’nin yayınlamış olduğu film veritabanından alınıyor. Sanırım biraz eski. Araştırmadım ama tahminimce bir kaç ay kadar. Ziyanı yok : )
Kodu bu haliyle kullanabilmek için projenin ‘classpath’ inde commons-beanutils,commons-collections-3.2.1, commons-lang, commons-logging, ezmorph-1.0.5 ve json-lib-2.4-jdk15 jar’larının bulunması gerekliyor.
Daha bir eli yüzü düzgün ve gerekli jar’ları barındıran kod örneği şuradan indirilip incelenebilir, Eclipse’e import edilebilir.
Son Yorumlar