ANADOLU AJANSI HABER AKIŞ SİSTEMİ (HAS) API ERİŞİM ve
Transkript
ANADOLU AJANSI HABER AKIŞ SİSTEMİ (HAS) API ERİŞİM ve
ANADOLU AJANSI HABER AKIŞ SİSTEMİ (HAS) API ERİŞİM ve KULLANIM KLAVUZU VERSİYON 1.0.0 06.05.2013 Anadolu Ajansından tarafınıza oluşturulan ve mail adresinize gelen, Master Kullanıcı Hesap Bilgileri ile http://has.aa.com.tr adresine giriş yaparak API servisini kullanmak üzerde bir API kullanıcısı oluşturmanız gerekmektedir. Oluşturduğunuz bu API kullanıcısı ile; yetkili olduğunuz Anadolu ajansı haber bültenlerini, tarafınızdan geliştirilmesi gereken bir script ya da uygulama ile otomatik olarak kendi sunucularına indirmek için kullanacaksınız. API kullanıcısı oluşturma adımları: 1. Master kullanıcı adınız ve şifreniz ile giriş yapınız. (Örnek için; kullanıcı adı olarak 3001300 seçilmiştir.) 2. Giriş yaptıktan sonra gelen pencereden; Yeni Kullanıcı butonuna tıklayınız. 3. Yeni kullanıcı tanımlama ekranından ilgili alanları doldurup, kullanıcı oluştur butonuna basarak API kullanıcısı oluşturma adımını tamamlanmış olacaksınız. Oluşturulan API kullanıcınız ile, yetkili olduğunuz bültenler üzerinden haberleri kendi bilgisayarlarınıza otomatik olarak indirebilmeniz için http://api.aa.com.tr adresi üzerinde hizmet veren servislere, uygun parametreleri göndermeniz gerekmektedir. API konsolu programlama kurulabilmektedir. seviyesinde aşağıdaki anlatıldığı gibi iletişim API’nin Genel Kullanım Bilgileri Anadolu Ajansı Abone Haber API’si HTTPS üzerinden GET ve POST metodları ile çalışır. Tüm isteklerde HTTP_BASIC_AUTH ile kullanıcı adı ve şifre gönderilmelidir. API cevapları JSON formatındadır. ( www.json.org ) API üç fonksiyondan oluşur. 1- discover: Arama fonksiyonuna ait parametrelerin sayısal karşılıklarını bize döndürür. 2- search: Gönderilen parametrelere haber aramalarını yaparak bulunan sonuçları listeleyen fonksiyonu barındırır. 3- document: Arama sonucu gelen haber listesinden istenilen haber, fotoğraf ve Video dosyalarının indirilmesini ve kullanıcı tarafından kaydedilebilmesini sağlayan fonksiyondur. Yapılacak entegrasyonda; Arama filtrelerini oluşturabilmek için discover fonksiyonu ile gelen değerler incelenmelidir. Oluşturulan filtreler ile ya da filtresiz olarak, Arama (search) şablonları kullanılarak, API aracılığı ile haber, fotoğraf ve görüntü araması yapılmalıdır. Arama sonuçlarında gelen haber numaraları ile haberin içeriğini isteğe göre farklı formatlarda imdirebilmek için document fonksiyonu ile kullanılmalıdır. 1. Discover Fonksiyonu Discover fonksiyonu, Anadolu Ajansı’nın servis ettiği haberlerin kategori (category), öncelik (priority), bülten (package), tür (type), dil (language), haberin sağlayıcısı (provider) bilgilerinin sayısal karşılıklarını getirir. Fonksiyona verilen language_iso parametresin; göre belirtilen dile çevirerek getirir. Türkçe karşılıkları için; GET /abone/discover/tr_TR İngilizce karşılıkları için; GET /abone/discover/en_US Arapça karşılıkları için; GET /abone/discover/ar_AR şeklinde parametreler gönderilerek kullanılmalıdır. gönderilmesi durumunda genel liste aşağıdaki gibidir. { "data": { "provider": { "1": "Anadolu Ajansı" }, "category": { "1": "Genel", "2": "Spor", "3": "Ekonomi", "4": "Sağlık", "5": "Bilim, Teknoloji", "6": "Politika", "7": "Kültür, Sanat, Yaşam" }, "priority": { "1": "1 Flaş", "2": "2 Acil", "3": "3 Önemli ", "4": "4 Rutin", "5": "5 Özel", "6": "6 Arşiv" }, "package": { "1": "Genel", "2": "Özel", "3": "Yerel", "5": "Internet" }, Parametre olarak tr_TR "type": { "1": "text", "2": "picture", "3": "video" }, "language": { "1": "tr_TR", "2": "en_US", "3": "ar_SA", "4": "bs_BA", "5": "ru_RU" } }, "response": { "success": true, "code": 200 } } API’den gelen cevap içinde her zaman için 2 nesne bulunmaktadır. Bunlar data ve response nesneleridir. 1. data: API’nin yanıtının yani kullanılacak verinin bulunduğu nesnedir. 2. response: API’ye gönderilen isteğe, sonucun başarılı bir şekilde gönderilip gönderilmediğini bildirir. Data parametresinin içerisindeki nesneler; provider: Haberin kaynağını / sağlayıcısını ifade eder. Örnek veride bulunan “1”: “Anadolu Ajansı” kısmı seach işleminde filter_provider için kullanabileceğiniz sayısal veriyi belirtir. category: Haberin kategorisi ifade eder. ( Genel, Spor, Ekonomi, Sağlık, Bilim-Teknoloji, Politika, Kültür-Sanat-Yaşam) priorty: Haberin önceliğini ifade eder. (1:Flaş, 2:Acil, 3:Önemli, 4:Rutin, 5:Özel, 6:Arşiv) package: Haberin yayınlandığı, abone olduğunuz haber bültenlerini ifade eder. (1:Genel Bülten, 2:Özel Bülten, 3:Yerel Bülten, 4:Spot Haber Bülten, 5:İnternet Haber Bülteni vb.) type: Haberin Türü ifade eder. (1:Haber, 2:Fotoğraf, 3:Video) language: Seçilen bülten içinden servis edilen diller arasından hangisini istediğinizi ifade eder. (Örneğin; Genel Bültenden Türkçe Olarak Servis edilen haberler) 1:tr_TR : Türkçe 2:en_US : İngilizce 3:ar_SA : Arapça 4:bs_BA : Boşnakça 5:ru_RU : Rusça 6:fr_FR : Fransızca vb. 2. Search Fonksiyonu Search fonksiyonu abonelik kapsamında almaya yetkili olduğunuz paketler içinde yer alan haberlerin tümünü ya da bir kısmını filtreleyerek listelemenizi sağlar. Bu fonksiyon POST methoduna dayanarak çalışır. Discovery fonksiyonu dönen data alanı içinde yer alan nesneler ile arama seçeneklerini oluşturabilrsiniz. Bir veya birden fazla filtre vererek arama sonuçlarını daraltabilirsiniz. Oluşturacağınız filtreleri genel olarak 4 başlık altında toplayabiliriz. 2.1 Tarih Filtreleri Aramada haberleri tarihe göre filtrelemek istediğimizde, 2 seçeneğimiz bulunmaktadır. start_date: Aramanın yapıldığı filtre için, haberlerin başlangıç tarihini ifade etmektedir. Başlangıç zamanı olarak belirli bir tarih seçilmeyip, var olan en eski (ilk kaydın oluşum zamanı) tarihten itibaren bir arama yapılmak istenirse “*” (yıldız) seçeneği kullanılabilir. end_date: Aramanın yapıldığı filtre için, haberlerin bitiş tarihini ifade etmektedir. İki tarih aralığında arama yapılırken; bitiş tarihi için “NOW” yazılırsa; o anki zaman olarak sistem filtreleme yapacaktır. Burada start_date ve end_date alanlarına belirli bir zaman girilmek isteniyorsa; tarih YYYY-MM-DDTHH:NN:SSZ formatında ve (UTC) Greenwich’e göre çevrilerek yazılmalıdır. Örneğin; Türkiye saati ile 15 Şubat 2013 15:45:00 için “2013-0215T13:45:00Z” şeklinde yazılmalıdır.( start_date = “2013-02-15T13:45:00Z” veya end_date = “NOW” gibi.) 2.2 İçerik Filtreleri İçerik filtreleme seçenekleri; discovery fonksiyonu ile bize dönen nesnelere filtrelemeleri kapsamaktadır. Discovery ile elde ettiğimiz provider, category, priorty, package, type ve language seçeneklerinin başlarına “filter_” kelimesini ekleyerek ve karşılıklarına yine discovery ile dönen sayısal değerleri girerek kullanılmaktadır. Örneğin; Filtreleme yaparken haberlerin sadece spor kategorisinden gelmesi isteniyorsa filter_category = “2” şeklinde kullanılır. Birden fazla kategoride filtreleme yapılmak isteniyorsa bu sayısal değerler virgülle ayırarak aynı parametre içinde gönderilir. filter_category = “2,3” şeklinde kullanılır. filter_provider =”1” ( Anadolu Ajansı kaynaklı haberler) filter_priority = “1,2” ( Flaş ve Acil önceliğindeki haberler) 2.3 Metin Filtresi İçerik ve Tarih filtreleriyle birlikte de kullanılabilen metin filtrelemesi aradığımız belli bir kelime ya da kelime grubuna göre gelecek olan haber listesini daraltmak için kullanılmaktadır. Bu filtreleme seçeneği için filtreler içine eklenecek “search_string” parametresi kullanılmaktadır. Bu sayede, haberlerin başlık, özet ve haber metni içerisinde geçen kelime ya da kelime gruplarına göre bir arama yapılarak haberler filtrelenebilmesi sağlanabilmektedir. Örneğin; search_string = “Anadolu,Müze” 2.4 Kayıt Filtresi Arama Sonucu gelen kayıtların sayfalanarak çekilmesi istenirse; kaçıncı kayıttan itibaren kaç adet kayıt listelenmesi gibi parametrelerin girilebileceği alanları içerir. Offset ve limit gibi iki adet parametre çeşidi bulunmaktadır. offset: Arama sonucunda bulunan haber listesinin içinden, kaçıncı kayıttan itibaren listelenmesi gerektiğini bildirecek parametredir. limit: Arama sonucunabildirilen ofset değerinden itibaren kaç adet kaydın getirileceğini bildirecek parametredir. Örneğin; offset : 0 limit : 100 Arama (Search) Fonksiyonu Kullanım Örnekleri Örnek 1: Türkiye’deki bir abone 15 Şubat 2013’de yayınlanmış Anadolu Ajansı Spor Servisi Türkçe haberlerini almak için aşağıdaki parametreleri göndermesi yeterlidir. POST /abone/search/ start_date : 2013-02-14T22:00:00Z end_date : 2013-02-15T22:00:00Z filter_category : 2 filter_type : 1 filter_language: 1 Örnek 2: Bosna’daki bir abone 15 Şubat 2013’de yayınlanmış Anadolu Ajansı Türkçe ve Boşnakça tüm haberlerini almak için aşağıdaki parametreleri göndermesi yeterlidir. POST /abone/search/ start_date : 2013-02-14T23:00:00Z end_date : 2013-02-15T23:00:00Z filter_type : 1 filter_language : 1,4 Örnek 3: Türkiye’deki bir abone 15 Şubat 2013‘den önce yayınlanmış tüm Anadolu Ajansı Genel ve Özel Bültendeki Türkçe haberlerinde “Dolar” kelimesini aramak için aşağıdaki parametreleri göndermesi yeterlidir. POST /abone/search/ start_date : * end_date : 2013-02-15T22:00:00Z search_string : Dolar filter_type : 1 filter_language: 1 filter_package: 1,2 Arama (Search) Fonksiyonundan Gelen Örnek Cevap { "data": { "result": [ { "id": "aa:text:20121122:92583", "type": "text", "date": "2012-11-22T09:59:22Z", "title": "Yerli teknoloji dünya gündeminde" }, { "id": "aa:text:20121122:92582", "type": "text", "date": "2012-11-22T09:51:13Z", "title": "Donanmada büyük hareketlilik!" } ], "total": 45 }, "response": { "success": true, "code": 200 } } POST methodu ile parametrelere uyan kayıtlara ilişkin API’den gelen cevabın içinde iki ana alan bulunmaktadır. “data” Alanı :Bu alanda aramaya uygun olarak bulunan kayıtlara ait bilgiler bulunmaktadır. Data alanı için 2 alt alan bulunmaktadır. o “result” Alanı : Result sonucu uygun olarak bulunmuş haberlerin dizisini barındırır. Her bir dizi elemanı içinde; haberi temsil eden nesne içerisinde yer alan id,type,date ve title alanları aşağıdaki bilgileri ifade etmektedir. o Id : Listelenen haberin tekil kayıt numarasıdır. Type: Haberin türünü belirtir(text, Photo,Video). Date: Haberin yayın tarihini belirtir. (UTC formatında) Title: HAberin başlığını belirtir. Total Alanı : Aramaya ilişkin bulunan toplam kayıt sayısını belirtir. “reponse” Alanı: Bu alan yapılan aramanın sonucunun başarılı bir şekilde döndürülüp döndürülmediğini bildirir. 3. Document Fonksiyonu Bu fonksiyon GET methodu ile çalışmaktadır. Search fonksiyonu ile yapılan haber aramasına istinaden dönen haber listesi içinde yer alan (Id) tekil haber numarası kullanılarak, haberin istenilen formatta indirilebilmesini sağlar. Bu fonksiyon içeriği iletirken Yönlendirme ile (Temporary Redirection: 304) gelebilir. Eğer abonelik kapsamında alınamayan bir içerik istenirse hata verilir (Forbidden : 403). İçerik indirme için yapılan yönlendirme ile üretilen linkler bir gün geçerli olmak üzere IP’ye özel olarak üretilir. API çağrısının yapıldığı ve indirme işleminin yapılacağı sunucu aynı IP’ye internet çıkış IP’sine sahip olmalıdır. Aksi takdirde 403 hatası alır. Örnek olarak; http://d01.aa.com.tr/2013/03/07/aa_picturegroup_20130307_13752/aa_picture _20130307_13754_high.jpg?token=d59c6f6f9356d061e3cd63a9d7986eab9f9938 34 Haberlerin indirilmesi : Arama sonucunda gelen haber listesi içinde type alanı text olan kayıtlar, sistemden NewsML v1.2 (newsml12) ve NewsML v2.9 (newsml29) formatlarında indirilebilmektedir. GET /abone/document/aa:text:20121122:92583/newsml29 GET /abone/document/aa:text:20121122:92583/newsml12 Fotoğrafların indirilmesi : Arama sonucunda gelen haber listesi içinde type alanı picture olan kayıtlar, sistemden abonelik tanımlarına gore print, web, mobile formatlarında indirilebilir. Abonelik kapsamında kalan bir formatta istek gönderilecek olursa; yanıt olarak Forbidden : 403 hata mesajı alınacaktır. GET /abone/document/aa:picture:20121122:92584/print Görüntülerin indirilmesi : Arama sonucunda gelen haber listesi içinde type alanı video olan kayıtlar, sistemden abonelik tanımlarına gore hd, sd, web, mobile formatlarında indirilebilir. Abonelik kapsamında kalan bir formatta istek gönderilecek olursa; yanıt olarak Forbidden : 403 hata mesajı alınacaktır. GET /abone/document/aa:video:20121122:92585/sd Kod Örnekleri Aşağıda java dilinde yazılmış ve HAS - API’si üzerinden içerikleri arayıp bilgisayarınıza indirmenizi sağlayacak kod örnekleri bulunmaktadır. HasNewsJob.java: Bu dosya yetkilere göre, haberleri arayıp, listeyen kod sınıfıdır. NewsResponseData.java: Bu dosya API’den dönen haber listesi üzerinden ilgili haber, foto ve görüntü dosyalarını bilgisayara indiren yardımcı data sınıfıdır. HasNewsJob.java sınıfının içeriği: import import import import java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; java.util.List; public class NewsResponseData { private ResponseVal response; private DataVal data; public ResponseVal getResponse() { return response; } public void setResponseVal(ResponseVal response) { this.response = response; } public DataVal getData() { return data; } public void setData(DataVal data) { this.data = data; } class ResponseVal { private boolean success; private int code; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } } class DataVal { private List<ResultVal> result; private int total; public List<ResultVal> getResult() { return result; } public void setResult(List<ResultVal> result) { this.result = result; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } } } class ResultVal { private String id; private String type; private String date; private String title; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public long getNewsId() { try { String newsId = id.substring(id.lastIndexOf(":")+1,id.length()); return Long.parseLong(newsId); } catch(Exception e){} return Long.MIN_VALUE; } } HasNewsJob.java sınıfının içeriği: import import import import import import import java.io.StringReader; java.nio.charset.Charset; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; java.util.Iterator; java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import import import import import import import import import import import import import import org.apache.commons.codec.binary.Base64; org.quartz.Job; org.quartz.JobExecutionContext; org.quartz.JobExecutionException; org.springframework.http.HttpEntity; org.springframework.http.HttpHeaders; org.springframework.http.HttpMethod; org.springframework.http.ResponseEntity; org.springframework.util.LinkedMultiValueMap; org.springframework.util.MultiValueMap; org.springframework.web.client.RestTemplate; org.w3c.dom.Document; org.w3c.dom.Element; org.xml.sax.InputSource; import com.aafinans.entity.News; import com.aafinans.main.ResponseClass; import com.google.gson.Gson; public class HASNewsJob implements Job { private RestTemplate restTemplate = new RestTemplate(); private final HttpHeaders userHeader = createHeaders("HAS_USERNAME","HAS_PASSWORD"); // Basic authentication headeri olusturma private MultiValueMap<String, String> postParameters = createMultiValueMap(); // Default haber arama filtreleri ile, filterleri içeren mapin yaratılması private DocumentBuilder builder = null; public void execute(JobExecutionContext context) throws JobExecutionException { setParameters(startDate,endDate); // oluşturulan haber arama filtresi mapini istenilen degerler ile güncelleme. NewsResponseData responseData = getNewsList(); // filtrelere uygun haber listesini oluşturma if ( responseData != null && responseData.getResponse().isSuccess() ) { getNews( responseData ); } throw new JobExecutionException("HAS Exception"); } /** * Belirlenen filtrelere göre haber listesini oluşturma /** * Belirlenen filtrelere göre haber listesini oluşturma * @return */ private NewsResponseData getNewsList() { NewsResponseData responseData = null; try { HttpEntity<?> requestEntity = new HttpEntity<Object>(postParameters, userHeader); ResponseEntity<String> out = restTemplate.exchange (FinanceProperties.getProperty("HAS_URL"), HttpMethod.POST, requestEntity , String.class); String response = out.getBody(); responseData = new Gson().fromJson(response, NewsResponseData.class); // olusturulan filtrelere göre apiden dönen cevabı, NewsResponseData objesine yükleme } catch(Exception e) { responseData = null; } return responseData; } // oluşturulan haber listesindeki haberlerin ayrıntılı bilgilerine ulaşma private void getNews( NewsResponseData responseData ) { try { Iterator<ResultVal> iterator = responseData.getData().getResult().iterator(); while (iterator.hasNext()) { ResultVal result = iterator.next(); HttpEntity<?> requestEntity = new HttpEntity<Object>(userHeader); ResponseEntity<String> out = restTemplate.exchange ("https://api.aa.com.tr/abone/document/"+result.getId()+"/newsml29", HttpMethod.GET, requestEntity , String.class); String body = out.getBody(); if ( builder == null ) { builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); } InputSource input = new InputSource( new StringReader( body ) ); Document document = builder.parse( input ); News news = new News(); news.setpriorityId(document.getElementsByTagName("priority").item(0).getTextContent()); news.setLocated(((Element)document.getElementsByTagName("located").item(0)).getAttribute("liter al")); news.setHeader(result.getTitle()); news.setCreateDate(result.getNewsDate()); news.setCreator(((Element)document.getElementsByTagName("creator").item(0)).getAttribute("liter al")); news.setnewsId(result.getNewsId()); news.setContent(content); if ( content.indexOf("<p>") > -1 && content.indexOf("</p>") > -1) / { news.setSpot(content.substring(content.indexOf("<p>")+3,content.indexOf("</p>"))); } else { news.setSpot(""); } } } catch(Exception e) { } } /** * @param username * @param password * @return */ private HttpHeaders createHeaders( final String username, final String password ) { return new HttpHeaders(){ { String auth = username + ":" + password; byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII")) ); String authHeader = "Basic " + new String( encodedAuth ); set( "Authorization", authHeader ); } }; } /** * @param username * @param password * @return */ private MultiValueMap<String, String> createMultiValueMap() { return new LinkedMultiValueMap<String, String>(){ { this.add("start_date", "2013-03-12T22:00:00Z"); this.add("end_date", "NOW"); this.add("filter_type", "1"); this.add("filter_language", "1"); this.add("filter_package", "1"); } }; } } private void setParameters(String startDate,String endDate) { postParameters.set("start_date", startDate); postParameters.set("end_date", endDate); } NewsML Örnekleri NewML 1.2 formatında indirilen Örnek bir haber ait dosya yapısı aşağıdaki gibidir. <?xml version="1.0" encoding="UTF-8"?> <NewsML> <NewsEnvelope> <DateAndTime>2013-04-25T14:05:57Z</DateAndTime> <Priority FormalName="3"/> </NewsEnvelope> <NewsItem> <Identification> <NewsIdentifier> <ProviderId>Anadolu Ajansı</ProviderId> <NewsItemId>38712</NewsItemId> <RevisionId PreviousRevision="" Update="1"/> <PublicIdentifier>aa:picture:20130425:37806</PublicIdentifier> </NewsIdentifier> </Identification> <NewsManagement> <NewsItemType FormalName="picture"/> <FirstCreated>2013-04-25T14:05:57Z</FirstCreated> <ThisRevisionCreated>2013-04-25T14:05:57Z</ThisRevisionCreated> <Status FormalName=""/> </NewsManagement> <NewsComponent Duid="Root" EquivalentsList="yes" xml:lang="bs_BA"> <NewsLines> <HeadLine>Pripadnici paravojnih snaga čuvaju straže u više iračkih gradova</HeadLine> <CopyrightLine>Anadolu Ajansı</CopyrightLine> </NewsLines> <AdministrativeMetadata> <Provider> <Party FormalName="Anadolu Ajansı"/> </Provider> <Creator> <Party Euid="akrehmic" FormalName="Admir Krehmiç"/> </Creator> <Source> <Party FormalName="AAFOTO"/> </Source> <Property FormalName="NewsNumber" Value="38712"/> <Property FormalName="Priority" Value="R"/> <Property FormalName="Category" Value="GEN"/> </AdministrativeMetadata> <DescriptiveMetadata> <Location HowPresent="Origin"> <Property FormalName="Country" Value="Turkey"/> <Property FormalName="City" Value="Iraq"/> </Location> </DescriptiveMetadata> <NewsComponent EquivalentsList="no"> <ContentItem Duid="Main_News"> <MediaType FormalName="xhtml"/> <DataContent>Naoružani pripadnici paravojnih formacija plemenskih snaga u nekoliko iračkih gradova čuvaju straže, kako tvrde, u cilju zaštite naroda od nasilja koje provodi premijer Nouri al-Maliki. (STRINGER / ANADOLU AGENCY) (20130424)</DataContent> </ContentItem> </NewsComponent> <NewsComponent EquivalentsList="no"> <AdministrativeMetadata> <Creator> <Party FormalName="Admir Krehmiç"/> </Creator> </AdministrativeMetadata> <ContentItem Href="aa_picture_20130425_37806_high.jpg"> <MediaType FormalName="high"/> <Characteristics> <Property FormalName="Size" Value="2201632"/> </Characteristics> </ContentItem> <ContentItem Href="aa_picture_20130425_37806_web.jpg"> <MediaType FormalName="web"/> <Characteristics> <Property FormalName="Size" Value="2201632"/> </Characteristics> </ContentItem> <ContentItem Href="aa_picture_20130425_37806_high_w.jpg"> <MediaType FormalName="high_w"/> <Characteristics> <Property FormalName="Size" Value="2201632"/> </Characteristics> </ContentItem> <ContentItem Href="aa_picture_20130425_37806_web_w.jpg"> <MediaType FormalName="web_w"/> <Characteristics> <Property FormalName="Size" Value="2201632"/> </Characteristics> </ContentItem> <ContentItem Href="aa_picture_20130425_37806_web_w.jpg"> <MediaType FormalName="web_w"/> <Characteristics> <Property FormalName="Size" Value="2201632"/> </Characteristics </ContentItem> </NewsComponent> </NewsComponent> </NewsItem> </NewsML> NewML 2.9 formatında indirilen Örnek bir haber ait dosya yapısı aşağıdaki gibidir. <newsMessage xmlns="http://iptc.org/std/nar/2006-10-01/" version="1" xml:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:noNamespaceSchemaLocation="http://iptc.org/std/nar/2006-10-01/XSD/NewsML-G2_2.9-specAll-Core.xsd" standard="NewsML-G2" standardversion="2.9" conformance="core" xml:lang="tr_TR"> <catalogRef href="http://www.iptc.org/std/catalog/catalog.IPTC-G2-Standards_19.xml"/> <header> <sent>2013-04-25T11:59:55Z</sent> <sender>aa.com.tr</sender> <priority>4</priority> <channel qcode="AApackage:1"> <name xml:lang="tr">Genel</name> <name xml:lang="en">Generic</name> <name xml:lang="ar"><عام/name> <name xml:lang="bs">Generalni servis</name> <name xml:lang="ru">Generic</name> </channel> </header> <itemSet> <packageItem> <itemRef residref="aa:text:20130425:37842"/> </packageItem> <newsItem guid="aa:text:20130425:37842" version="1" xml:lang="bs"> <rightsInfo> <copyrightHolder literal="Anadolu Ajansı"/> </rightsInfo> <itemMeta> <itemClass qcode="ninat:text"/> <provider literal="Anadolu Ajansı"/> <versionCreated>2013-04-25T11:40:10Z</versionCreated> <pubStatus qcode="stat:usable"/> <link rel="irel:seeAlso" residref="aa:picture:20130425:37806"> <itemClass qcode="ninat:picture"/> <title> Pripadnici paravojnih snaga čuvaju straže u više iračkih gradova </title> </link> <link rel="irel:seeAlso" residref="aa:picture:20130425:37807"> <itemClass qcode="ninat:picture"/> <title> Pripadnici paravojnih snaga čuvaju straže u više iračkih gradova </title> </link> <link rel="irel:seeAlso" residref="aa:video:20130425:37791"> <itemClass qcode="ninat:video"/> <title> Pripadnici paravojnih snaga čuvaju straže u više iračkih gradova </title> </link> </itemMeta> <contentMeta> <contentCreated>2013-04-25T11:40:10Z</contentCreated> <located qcode="city:2014" type="cptype:city"> <name xml:lang="tr">Musul</name> <name xml:lang="en">Ninawa</name> <name xml:lang="ar"><ن ي نوى/name> <name xml:lang="bs">Ninawa</name> <name xml:lang="ru">Ninawa</name> <broader qcode="country:106" type="cptype:country"> <name xml:lang="tr">Irak</name> <name xml:lang="en">Iraq</name> <name xml:lang="ar"><ال عراق/name> <name xml:lang="bs">Iraq</name> <name xml:lang="ru">Ирак</name> </broader> </located> <creator literal="Admir Krehmiç,Emrah Yorulmaz,Mustafa Kerim" qcode="AArole:author"/> <language tag="bs"/> <subject qcode="AAcat:GEN" type="cpnat:descriptive"> <name xml:lang="tr">Genel</name> <name xml:lang="en">Generic</name> <name xml:lang="ar"><عام/name> <name xml:lang="bs">Društvo</name> <name xml:lang="ru">Generic</name> </subject> <subject qcode="AApackage:1" type="cpnat:descriptive"> <name xml:lang="tr">Genel</name> <name xml:lang="en">Generic</name> <name xml:lang="ar"><عام/name> <name xml:lang="bs">Generalni servis</name> <name xml:lang="ru">Generic</name> </subject> <keyword role="krole:index" xml:lang="bs">Irak</keyword> <headline>Irak: 14 poginulih u sukobima u Mosulu</headline> </contentMeta> <contentSet> <inlineXML contenttype="application/nitf+xml"> <nitf xmlns="http://iptc.org/std/NITF/2006-10-18/"> <body> <body.head> <headline> <hl1>Irak: 14 poginulih u sukobima u Mosulu</hl1> </headline> <byline> <byttl>Admir Krehmiç,Emrah Yorulmaz,Mustafa Kerim</byttl> </byline> </body.head> <body.content> <p>MOSUL </p><p>Najmanje 14 osoba, od kojih su četvorica pripadnici Oružanih snaga Iraka, smrtno je stradalo u sukobu prosvjednika i vladinih snaga u iračkom gradu Mosulu, javio je dopsinik agencije Anadolija.</p><p>Zvaničnici iračke policije saopćili su kako je u sukobima prosvjednika i vladinih snaga sigurnosti poginulo 14 ljudi. Među poginulima je bilo deset prosvjednika i četiri vojnika. Do sukoba je došlo u različitim dijelovima Mosula.</p><p>Snage sigurnosti su u mjestu Karatepe koje pripada iračkoj regiji Salahuddin prisilile mještane da napuste svoje domove.</p><p>Prosvjednici u Ramadi, s druge strane, organizirali su oružane straže i, kako su naveli, čuvaju narod od nasilja premijera Nourija al-Malikija.</p> </body.content> </body> </nitf> </inlineXML> </contentSet> </newsItem> </itemSet> </newsMessage> Önemli Not: Bu klavuz içerisinde yer alan tüm görsel, bilgi ve diğer materyallerin telif hakkı Anadolu Ajansı’na aittir. Bu klavuz bilgilendirme amaçlı olup klavuz içerisinde yer alan bilgiler hiçbir şekilde ticari amaçlı kullanılamaz, kopyalanamaz, dağıtılamaz, değiştirilemez.
Benzer belgeler
eXtensible Markup Language
kullanılarak, haberin istenilen formatta indirilebilmesini sağlar.
Bu fonksiyon içeriği iletirken Yönlendirme ile (Temporary Redirection: 304)
gelebilir. Eğer abonelik kapsamında alınamayan bir içe...