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

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...

Detaylı