FTP, FTPS ve SFTP
İki yol vardır:
| Yol | Nasıl |
|---|---|
Gönderim (ftp_gonderim, sftp_gonderim) | Biz sizin sunucunuza yazarız |
Ajans FTP sunucusu (ajans_ftp) | Siz ftp.<alan>'a bağlanıp indirirsiniz (SFTP :2222, FTPS :21); dosyalar 7 gün durur |
Bağlantı
- FTPS varsayılandır (açık TLS,
AUTH TLS); örtük TLS (990) de seçilebilir. Şifresiz FTP ajansın izniyle açılır. Kendinden imzalı sertifika için profile sertifikanın SHA-256 parmak izi yazılabilir. - Her zaman pasif kip kullanırız (önce
EPSV).PASVyanıtındaki adres yok sayılır; veri bağlantısı denetim bağlantısının adresine açılır. - SFTP: parola ya da anahtarla. Anahtar seçerseniz biz profil başına bir Ed25519 anahtar çifti üretiriz; açık anahtarı (YHA Abone'de görünür) sunucunuzun
authorized_keysdosyasına ekleyin. Özel anahtar hiçbir zaman dışarı verilmez. - Sunucu anahtarı onayı (SFTP): ilk "Bağlantıyı sına"da sunucunuzun anahtar parmak izini gösteririz (
SHA256:…); onaylamadan çıkış etkinleşmez. Parmak izi sonradan değişirse gönderim durur ve yeniden onay istenir. - Ajansın çıkış adresleri (güvenlik duvarınızda izin verin): Çıkış adresleri. Adres değişirse 30 gün önceden duyurulur.
Dosya düzeni
- Bir haber = bir XML (ya da JSON) dosyası ve erişilebilen her fotoğraf ve video için ayrı dosya.
- Yazma sırası: önce medya, en son XML. "Geçici ad" açıksa (varsayılan) her dosya
.yha-tmpekiyle yazılıp yeniden adlandırılır; klasör izleyen yazılımınız yarım dosya görmez. - "Gün klasörü" açıksa (varsayılan)
hedef_klasor/2026-10-07/altına yazılır; klasör yoksa oluşturulur. - Düzeltmede yeni dosya yazılır (desen
{surum}içermiyorsa aynı ad üzerine). İptalde…_IPTAL.xmlgelir; "iptalde sil" açıksa önceki dosyalar da silinir.
Dosya adı deseni
Varsayılan {tarih}_{no}_s{surum} → 20261007_H-001230_s2.xml. Uzantı biçimden gelir, desende yazılmaz.
| Değişken | Örnek |
|---|---|
{tarih} | 20261007 (Türkiye saati) |
{saat} | 141905 |
{no} | H-001230 |
{surum} | 2 |
{olay} | yeni, duzeltme, iptal |
{kategori} | ekonomi |
{il} | 61 |
{varlik_no} | F-000386 |
{sira} | 1 |
Yalnızca A-Z a-z 0-9 _ . - ve değişkenler; /, .. ve boşluk yasak; en çok 120 karakter. Medya dosyası <haber adı>_<varlık no>.<uzantı> (20261007_H-001230_s1_F-000386.jpg); tek başına medya {tarih}_{varlik_no}.
Karakter kodlaması
UTF-8 (varsayılan), ISO-8859-9, Windows-1254. XML başlığındaki encoding buna göre yazılır; karşılığı olmayan karakter en yakın harfe çevrilir. JSON her zaman UTF-8'dir. Desen ve kodlama değişikliği bir sonraki teslimde geçerlidir.
Biçimler
newsml_g2 (varsayılan; NewsML-G2), yha_xml (ajans XML'i), yha_json (DisOlay).
Medya
Fotoğraf: yok, kucuk (400 px, filigranlı), web, orijinal, baglanti (dosya gitmez, XML'de 72 saatlik imzalı adres). İsteğe bağlı genişlik (px). Video: yok, baglanti (varsayılan), dosya (480p, 720p, 1080p). Gönderilen dosyalar konum ve cihaz bilgisinden temizlenmiştir.
Embargo
Dosya kanallarında embargolu içerik varsayılan olarak yayım saatinde gider (embargo: bekle); profilde onceden_ver seçilirse hemen gider ve XML embargoed taşır.
Hatalar
Bağlantı ve kimlik hataları (ör. 530) yeniden denenir; art arda hatada çıkış arızalı görünür, Teknik Destek uyarılır. Parolayı düzelttiğinizde bekleyen içerik sırayla gider. 552/553 gibi dosya hataları yalnızca o içeriği etkiler.
FTP ve SFTP ile Haber Çekme: Yazar Haber Ajansı Dosya Aktarım Rehberi
FTP veya SFTP ile haber çekmek, Yazar Haber Ajansı (YHA) haberlerinin, fotoğraflarının ve videolarının dosya olarak sizin sistemlerinize aktarılmasıdır. YHA'da bunun iki yolu vardır: gönderimde ajans sizin FTP/SFTP sunucunuza yazar; ajans FTP sunucusunda ise siz ftp.yha.com.tr'ye bağlanıp dosyaları indirirsiniz. Her iki yolda da şifreli bağlantı esastır: FTPS varsayılandır, SFTP de kullanılabilir; şifresiz FTP yalnızca ajansın izniyle açılır.
Dosya tabanlı aktarım; klasör izleyen haber yazılımları, gazete sayfa üretim sistemleri ve kapalı ağdaki iç sistemler için hâlâ pratik bir yöntemdir. Bu sayfada iki yolun farkını, bağlantı kurallarını, dosya düzenini ve adlandırmayı, biçimleri ve ajans FTP sunucusundan otomatik indirmeyi anlatıyoruz. Diğer entegrasyon yöntemleriyle karşılaştırma için Yazar Haber Ajansı geliştirici belgeleri sayfasına bakabilirsiniz.
İki yol: gönderim ve ajans FTP sunucusu
| Yol | Nasıl çalışır | Ne zaman |
|---|---|---|
Gönderim (ftp_gonderim, sftp_gonderim) |
Ajans, servis edilen her içeriği sizin sunucunuzdaki hedef klasöre yazar | Haber yazılımınız kendi sunucunuzdaki bir klasörü izliyorsa |
Ajans FTP sunucusu (ajans_ftp) |
Siz ftp.yha.com.tr'ye bağlanıp indirirsiniz (SFTP 2222, FTPS 21); dosyalar 7 gün durur |
Dışarıdan bağlantı kabul eden bir sunucunuz yoksa ya da indirmeyi kendiniz zamanlamak istiyorsanız |
Her iki yol da YHA Abone · Çıkışlar ekranında bir çıkış profili olarak açılır ve paketinize sözleşmeyle eklenir. FTP, SFTP ve ajans FTP ile giden dosyalar API'deki aylık indirme kotasına girmez. Hazır ayarlarla kurulum için hazır bağlantılar sayfasına bakın.
Dosya tabanlı aktarım ne zaman mantıklı?
Her yayın kuruluşu için en iyi yöntem aynı değildir. Dosya kanalları özellikle şu senaryolarda öne çıkar:
- Klasör izleyen haber yazılımları: Çoğu haber yazılımı ve mizanpaj sistemi belirli bir klasöre düşen NewsML-G2, NITF ya da IPTC 7901 dosyalarını okur. Gönderimle dosyalar doğrudan bu klasöre yazılır.
- Fotoğraf ve video dosyaları: Paketinize göre medya dosyası haberle aynı klasöre gelir; tek tek HTTP isteği gerekmez.
- Kapalı ağdaki sistemler: Webhook alamayan iç sistemler, ajans FTP sunucusundan indirme yapabilir.
Buna karşılık süzgeçli sorgu, arşivde arama veya saniyeler içinde bildirim istiyorsanız API ile haber çekmek ya da webhook daha uygun olur. Birçok abone iki yöntemi birlikte kullanır.
FTP, FTPS ve SFTP arasındaki farklar
| Özellik | FTP | FTPS | SFTP |
|---|---|---|---|
| Dayandığı protokol | FTP (RFC 959) | FTP + TLS (RFC 4217) | SSH |
| Şifreleme | Yok: parola ve dosyalar açık metin | Var (TLS) | Var (SSH) |
| YHA'da | Yalnızca ajansın izniyle | Varsayılan (açık TLS, AUTH TLS); örtük TLS (990) seçilebilir |
Parola ya da anahtarla |
| Güvenlik duvarı uyumu | Zor (veri bağlantıları) | Zor | Kolay (tek bağlantı noktası) |
Düz FTP'nin en büyük sorunu, kullanıcı adı ve parolanın ağ üzerinde şifrelenmeden gitmesidir. Bu yüzden yeni bir entegrasyonda FTPS ya da SFTP kullanın. Ajans FTP bağlantılarında her zaman pasif kip kullanır (önce EPSV); PASV yanıtındaki adres yok sayılır ve veri bağlantısı denetim bağlantısının adresine açılır.
Gönderim: ajans sizin sunucunuza yazar
Profil ayarları
Çıkış profilinde hedef adresi, bağlantı noktasını, kimlik bilgisini ve hedef klasörü girersiniz; biçim, kodlama, dosya adı deseni ve medya seçenekleri de aynı profildedir. FTPS'te sunucunuz kendinden imzalı sertifika kullanıyorsa profile sertifikanın SHA-256 parmak izini yazabilirsiniz.
SFTP'de anahtarla giriş
SFTP'de parola ya da anahtar kullanılabilir. Anahtar seçerseniz anahtar çiftini ajans üretir: her profil için bir Ed25519 anahtar çifti oluşturulur, açık anahtar YHA Abone'de görünür. Siz yalnızca bu açık anahtarı sunucunuzdaki kullanıcının authorized_keys dosyasına eklersiniz; özel anahtar hiçbir zaman dışarı verilmez.
# Sunucunuzda, gönderim için ayrılmış kullanıcıyla
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... (YHA Abone'de görünen açık anahtar)" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Bu kullanıcıya yalnızca hedef klasöre yazma izni vermeniz yeterlidir; gerekirse SFTP'ye kısıtlayın (OpenSSH ForceCommand internal-sftp ve ChrootDirectory ayarları).
Sunucu anahtarı onayı ve güvenlik duvarı
İlk "Bağlantıyı sına"da YHA, sunucunuzun SSH anahtar parmak izini (SHA256:…) gösterir; onaylamadan çıkış etkinleşmez. Bu değeri kendi sunucunuzda ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub ile karşılaştırın. Parmak izi sonradan değişirse gönderim durur ve yeniden onay istenir.
Güvenlik duvarınızda ajansın çıkış adreslerine izin verin. Adresler canlıya geçişte yayımlanır, değişiklik 30 gün önceden duyurulur: Çıkış adresleri. Ajans yalnızca genel internet adreslerine bağlanır; özel ağ adresleri reddedilir.
Ajans FTP sunucusundan indirme
Ajans FTP sunucusunda bağlantıyı siz kurarsınız:
| Bilgi | Değer |
|---|---|
| Sunucu | ftp.yha.com.tr |
| SFTP | bağlantı noktası 2222 |
| FTPS | bağlantı noktası 21 |
| Kimlik | Ajans FTP çıkışını açtığınızda size verilen kullanıcı bilgileri |
| Saklama | Dosyalar sunucuda 7 gün durur |
Masaüstü araçlarla elle bağlanma
Otomasyona geçmeden önce bağlantıyı bir masaüstü istemcisiyle denemek sorunları erken görmenizi sağlar. FileZilla'da Dosya › Site Yöneticisi'nde yeni site ekleyin, protokol olarak SFTP seçin, sunucuya ftp.yha.com.tr, bağlantı noktasına 2222 yazın; FTPS için "FTP - Dosya Aktarım Protokolü" ve "Açık TLS üzerinden FTP gerektir" seçeneğiyle 21'i kullanın. Windows'ta WinSCP de yaygın bir tercihtir; komut satırı ve betik desteği, Görev Zamanlayıcı ile otomatik indirme yapmanıza olanak tanır. İlk SFTP bağlantısında istemcinin gösterdiği sunucu parmak izini körü körüne onaylamayın.
Komut satırı ve cron ile otomatik indirme
Linux sunucularda pratik yol lftp aracının mirror komutudur; uzak klasörü yerel klasörle eşitler ve yalnızca yeni dosyaları indirir.
#!/bin/sh
# /opt/yha/cek.sh — parolayı ortam değişkeninden alır (LFTP_PASSWORD)
lftp --env-password -u "$YHA_FTP_KULLANICI" \
-e "mirror --only-newer --parallel=2 / /var/yha/gelen; quit" \
"sftp://ftp.yha.com.tr:2222"
Betiği her beş dakikada bir çalıştırmak için crontab -e ile şu satırı ekleyin; flock iki kopyanın aynı anda çalışmasını önler:
*/5 * * * * flock -n /tmp/yha.lock /opt/yha/cek.sh >> /var/log/yha-cek.log 2>&1
Python (paramiko)
import os, paramiko
istemci = paramiko.SSHClient()
istemci.load_system_host_keys() # sunucu anahtarı önceden doğrulanmış olmalı
istemci.set_missing_host_key_policy(paramiko.RejectPolicy())
istemci.connect("ftp.yha.com.tr", port=2222, username=os.environ["YHA_FTP_KULLANICI"],
password=os.environ["YHA_FTP_PAROLA"], timeout=20)
sftp = istemci.open_sftp()
def indir(uzak, yerel):
os.makedirs(yerel, exist_ok=True)
for oge in sftp.listdir_attr(uzak):
ad = oge.filename
if ad.endswith(".yha-tmp"):
continue # henüz yazılıyor
if oge.st_mode & 0o040000: # gün klasörü
indir(f"{uzak}/{ad}", os.path.join(yerel, ad))
elif not os.path.exists(os.path.join(yerel, ad)):
sftp.get(f"{uzak}/{ad}", os.path.join(yerel, ad))
indir(".", "/var/yha/gelen")
sftp.close(); istemci.close()
PHP (phpseclib)
<?php
require 'vendor/autoload.php';
use phpseclib3\Net\SFTP;
$sftp = new SFTP('ftp.yha.com.tr', 2222);
if (!$sftp->login(getenv('YHA_FTP_KULLANICI'), getenv('YHA_FTP_PAROLA'))) {
error_log('YHA ajans FTP girişi başarısız');
exit(1);
}
$gun = date('Y-m-d'); // gün klasörü açıksa
foreach ($sftp->nlist($gun) ?: [] as $ad) {
if ($ad === '.' || $ad === '..' || str_ends_with($ad, '.yha-tmp')) continue;
$yerel = "/var/yha/gelen/$ad";
if (!file_exists($yerel)) {
$sftp->get("$gun/$ad", $yerel);
}
}
Python örneğindeki RejectPolicy, tanınmayan bir sunucu anahtarıyla karşılaşıldığında bağlantıyı reddeder; sunucu anahtarını ilk kez ssh-keyscan -p 2222 ftp.yha.com.tr ile alıp parmak izini doğruladıktan sonra known_hosts dosyasına ekleyin. PHP örneğinde gece yarısı geçişlerinde bir önceki günün klasörünü de kontrol edin.
Dosya düzeni
- Bir haber = bir XML (ya da JSON) dosyası ve erişilebilen her fotoğraf ve video için ayrı dosya.
- Yazma sırası: önce medya, en son XML. "Geçici ad" açıksa (varsayılan) her dosya
.yha-tmpekiyle yazılıp yeniden adlandırılır; klasör izleyen yazılımınız yarım dosya görmez. - "Gün klasörü" açıksa (varsayılan) dosyalar
hedef_klasor/2026-10-07/altına yazılır; klasör yoksa oluşturulur. - Düzeltmede yeni dosya yazılır (desen
{surum}içermiyorsa aynı ad üzerine). İptalde…_IPTAL.xmlgelir; "iptalde sil" açıksa önceki dosyalar da silinir.
Varsayılan dosya adı deseni {tarih}_{no}_s{surum}'dur: 20261007_H-001230_s2.xml. Kullanılabilen değişkenler {tarih} (Türkiye saatiyle), {saat}, {no}, {surum}, {olay}, {kategori}, {il}, {varlik_no} ve {sira}'dır; uzantı biçimden gelir. Medya dosyası <haber adı>_<varlık no>.<uzantı> biçimindedir (20261007_H-001230_s1_F-000386.jpg).
Biçim, kodlama ve medya seçenekleri
- Biçim:
newsml_g2(varsayılan; NewsML-G2),yha_xml(ajans XML'i),yha_json; hazır ayarlarla NITF ve IPTC 7901 de seçilebilir. - Kodlama:
UTF-8(varsayılan),ISO-8859-9,Windows-1254. XML başlığındakiencodingbuna göre yazılır; JSON her zaman UTF-8'dir. - Fotoğraf:
yok,kucuk(400 px, filigranlı),web,orijinalya dabaglanti(dosya gitmez, XML'de 72 saatlik imzalı adres). Video:yok,baglanti(varsayılan) ya dadosya(480p,720p,1080p). Gönderilen dosyalar konum ve cihaz bilgisinden temizlenmiştir. - Embargo: Embargolu içerik varsayılan olarak yayım saatinde gider; profilde "önceden ver" seçilirse hemen gider ve XML
embargoedbilgisini taşır.
İçe aktarma betiğinin görevleri
Dosyaları almak işin yarısıdır. Klasörü izleyip sitenize aktaran betik genellikle şu adımları izler:
- XML'i bekleyin. Ajans önce medyayı, en son XML'i yazar;
.yha-tmpuzantılı dosyaları atlayın ve haberi XML geldiğinde işleyin. - Ayrıştırın. Ayrıştırma hatası varsa dosyayı bir sonraki tura bırakın ve hatayı kaydedin.
- Kimliğe ve sürüme göre eşleştirin. Haber numarası sitenizde varsa ve dosyadaki sürüm daha büyükse kaydı güncelleyin, yoksa yeni haber oluşturun.
- İptali işleyin.
_IPTALdosyası geldiğinde haberi yayından kaldırın. - Medyayı bağlayın. Haber adıyla başlayan medya dosyalarını habere ilişkilendirin; açıklama ve imzayı koruyun.
- Kategoriyi eşleyin ve taslağa alın. Ajans kategori kodunu kendi yapınıza dönüştürün; editör kontrolü için taslak modunu tercih edin.
Sorun giderme
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Gönderim gelmiyor, çıkış "arızalı" | Güvenlik duvarı ajansın çıkış adreslerini engelliyor ya da parola değişti | Adreslere izin verin, parolayı profilde düzeltin; bekleyen içerik sırayla gider |
| SFTP gönderimi durdu | Sunucunuzun anahtar parmak izi değişti | YHA Abone'de yeni parmak izini karşılaştırıp onaylayın |
530 hatası |
Kimlik hatası | Ajans yeniden dener; art arda hatada Teknik Destek uyarılır, kimlik bilgisini düzeltin |
552 / 553 |
Dosya hatası (kota, izin, ad) | Yalnızca o içeriği etkiler; disk ve klasör izinlerini kontrol edin |
| FTP'de liste gelmiyor | Pasif kip ya da veri bağlantısı engelli | Pasif bağlantı noktalarını açın ya da SFTP'ye geçin |
| Türkçe karakterler bozuk | Kodlama yanlış okunuyor | Profildeki kodlamayla yazılımınızın okuduğu kodlamayı eşleyin |
Bağlantıyı sınamak için çıkış ekranındaki Deneme gönder düğmesi son uygun içeriği (yoksa örnek içeriği) deneme: true işaretiyle gönderir. Tüm ayarlar doğru olduğu halde sorun sürüyorsa YHA servis durumu sayfasında "FTP ve SFTP çıkışı" bileşenine bakın.
İki protokolün çalışma mantığını ve güvenlik farkını FTP ve SFTP nedir? rehberinde ayrıntılı anlattık.
Sıkça Sorulan Sorular
FTP ile haber çekmek güvenli mi?
Düz FTP şifreleme kullanmadığı için güvenli değildir; YHA'da da yalnızca ajansın izniyle açılır. Varsayılan FTPS'tir; SFTP de kullanabilirsiniz.
Gönderim mi, ajans FTP sunucusu mu?
Sunucunuz ajansın bağlanmasına açıksa gönderim daha hızlıdır: içerik servis edildiği anda klasörünüze yazılır. Dışarıdan bağlantı kabul edemiyorsanız ajans FTP sunucusundan düzenli aralıklarla indirin; dosyalar orada 7 gün durur.
Dosyaları ne sıklıkla kontrol etmeliyim?
Gönderimde kontrol gerekmez; klasörü izleyen yazılımınız dosyayı geldiği anda görür. Ajans FTP sunucusundan indiriyorsanız birkaç dakikalık bir aralık çoğu site için yeterlidir.
Windows sunucuda cron yerine ne kullanırım?
Windows'ta cron'un karşılığı Görev Zamanlayıcı'dır. WinSCP'nin komut satırı sürümüyle hazırladığınız betiği birkaç dakikada bir çalışacak şekilde ayarlayabilirsiniz; görevin oturum açmış kullanıcıdan bağımsız çalıştığından emin olun.
Paylaşımlı hostingde SFTP ile haber çekebilir miyim?
Hosting paketiniz cron görevlerine ve dışarıya bağlantıya izin veriyorsa ajans FTP sunucusundan indirebilirsiniz; phpseclib ek sunucu yazılımı gerektirmez. WordPress kullanıyorsanız ajansın WordPress eklentisi daha uygun bir seçenektir.
İndirdiğim dosyaları ajans sunucusundan silmeli miyim?
Gerek yoktur; dosyalar ajans FTP sunucusunda 7 gün durur. Kendi tarafınızda hangi dosyaları işlediğinizi bir kayıt tablosunda tutmanız yeterlidir.