Auteur de la discussion
#1
curl ile veri çıktısını işleme
Giriş ve bağlam
Günlükte veya otomatikleştirilmiş iş akışlarında, uzak bir kaynaktan dönen veriyi first-class bir şekilde işlemek için curl tek başına yetersiz kalabilir. Bu yüzden çıktıyı parse etmek, filtrelemek ve gerektiğinde yeniden kullanıma uygun bir formata dönüştürmek önemli. Aşağıda karşılaşılan tipik senaryoları, basit ve uygulanabilir örneklerle ele alacağım.
1) JSON çıktısını ayrıştırmak
Bir çok API, veriyi JSON olarak döner. curl ile API çağrısı yapıp çıktıyı doğrudan işlemeye almak için temel adımlar şunlar:
-Çıktıyı bir tool ile parse edin, örneğin jq.
Örnek:
[cod e]curl -sSf https://api.example.com/veri -H "Accept: application/json" | jq '.veriListesi[] | {id, adi, durumu}'[/code]
Bu komut, gelen JSON içinden veriListesi içindeki öğeleri id, adi ve durumu alanlarında özetler.
2) XML çıktısını işlemek
XML için genelde xmllint veya xmlstarlet kullanılır. Basit ayrıştırma için xmlstarlet ile belirli elemanları seçebilirsiniz.
[cod e]curl -sSf https://api.example.com/data.xml | xmlstarlet sel -t -m "//kayit" -v "concat(@id,':',isim)" -n[/code]
3) Metin/CSV işleme ve filtreleme
Çoğu API veya araç CSV dönebilir. awk, sed, cut ile hızlı filtreler yapmak mümkün.
[cod e]curl -sSf https://api.example.com/data.csv | awk -F, '$3=="aktif" {print $1","$2","$3}'[/code]
4) Başlıklar ve hata yönetimi
curl çıktısını kontrol etmek, hata durumlarını yakalamak için -w ve exit kodlarını kullanın.
[cod e]set -e
response=$(curl -sSf -w "%{http_code}" https://api.example.com/resource)
http_code=$(echo "$response" | tail -c 3)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -ge 400 ]; then
echo "Hata: HTTP $http_code"
echo "$body" >&2
exit 1
fi
echo "$body" | jq '.');[/code]
5) SSR/CI akışına entegre etmek
Sık kullanılan akışlarda curl ile alınan veriyi komut zincirine koyup, sonraki adımda ilgili dosyaya yazmak veya bir iş kuyruğuna göndermek yaygındır. Örneğin:
[cod e]curl -sSf https://api.example.com/dosya.csv | gzip > dosya.csv.gz
curl -sSf https://api.example.com/dosya.csv | gzip | pv -s $(curl -sSf https://api.example.com/dosya.csv | wc -c) > dosya.csv.gz[/code]
İpuçları ve dikkat edilmesi gerekenler
Kapanış
Curl ile çıktıyı almak tek başına yeterli değildir; çıktıyı uygun araçlarla parse etmek, güvenlik ve hata yönetimini koymak gerekir. Bu yaklaşımlardan hangisi sizin iş akışınıza daha çok uyuyor? deneyimleriniz veya karşılaştığınız zorluklar nelerdir?
Giriş ve bağlam
Günlükte veya otomatikleştirilmiş iş akışlarında, uzak bir kaynaktan dönen veriyi first-class bir şekilde işlemek için curl tek başına yetersiz kalabilir. Bu yüzden çıktıyı parse etmek, filtrelemek ve gerektiğinde yeniden kullanıma uygun bir formata dönüştürmek önemli. Aşağıda karşılaşılan tipik senaryoları, basit ve uygulanabilir örneklerle ele alacağım.
1) JSON çıktısını ayrıştırmak
Bir çok API, veriyi JSON olarak döner. curl ile API çağrısı yapıp çıktıyı doğrudan işlemeye almak için temel adımlar şunlar:
- -s (sessiz modu) ile gereksiz çıktıyı bastırın.
- -f ile hata durumunda çıktı vermesini sağlayın.
- -H 'Accept: application/json' ile JSON istemeyi hatırlayın.
-Çıktıyı bir tool ile parse edin, örneğin jq.
Örnek:
[cod e]curl -sSf https://api.example.com/veri -H "Accept: application/json" | jq '.veriListesi[] | {id, adi, durumu}'[/code]
Bu komut, gelen JSON içinden veriListesi içindeki öğeleri id, adi ve durumu alanlarında özetler.
2) XML çıktısını işlemek
XML için genelde xmllint veya xmlstarlet kullanılır. Basit ayrıştırma için xmlstarlet ile belirli elemanları seçebilirsiniz.
[cod e]curl -sSf https://api.example.com/data.xml | xmlstarlet sel -t -m "//kayit" -v "concat(@id,':',isim)" -n[/code]
3) Metin/CSV işleme ve filtreleme
Çoğu API veya araç CSV dönebilir. awk, sed, cut ile hızlı filtreler yapmak mümkün.
[cod e]curl -sSf https://api.example.com/data.csv | awk -F, '$3=="aktif" {print $1","$2","$3}'[/code]
4) Başlıklar ve hata yönetimi
curl çıktısını kontrol etmek, hata durumlarını yakalamak için -w ve exit kodlarını kullanın.
[cod e]set -e
response=$(curl -sSf -w "%{http_code}" https://api.example.com/resource)
http_code=$(echo "$response" | tail -c 3)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -ge 400 ]; then
echo "Hata: HTTP $http_code"
echo "$body" >&2
exit 1
fi
echo "$body" | jq '.');[/code]
5) SSR/CI akışına entegre etmek
Sık kullanılan akışlarda curl ile alınan veriyi komut zincirine koyup, sonraki adımda ilgili dosyaya yazmak veya bir iş kuyruğuna göndermek yaygındır. Örneğin:
[cod e]curl -sSf https://api.example.com/dosya.csv | gzip > dosya.csv.gz
curl -sSf https://api.example.com/dosya.csv | gzip | pv -s $(curl -sSf https://api.example.com/dosya.csv | wc -c) > dosya.csv.gz[/code]
İpuçları ve dikkat edilmesi gerekenler
- Güvenilirlik için -sS ve -f kombinasyonunu kullanın; hatayı da loglayın.
- Zaman aşımı ayarını ihmal etmeyin; -m veya --max-time ile istenmeyen beklemeyi engelleyin.
- İçerik tipiyle uyumlu çözümler kullanın: JSON için jq, XML için xmlstarlet.
- Çıktıyı dosyaya yazacaksanız gerçekte akışa bağlı olarak adım adım dönüştürme yapın; örneğin JSON -> CSV dönüşümü.
Kapanış
Curl ile çıktıyı almak tek başına yeterli değildir; çıktıyı uygun araçlarla parse etmek, güvenlik ve hata yönetimini koymak gerekir. Bu yaklaşımlardan hangisi sizin iş akışınıza daha çok uyuyor? deneyimleriniz veya karşılaştığınız zorluklar nelerdir?
