2016-04-08 10 views
1

Bir api'den hava durumu verilerine erişiyorum ve ilk api tarafından döndürülen json dizisindeki tüm şehirler için hava durumu verilerini almak için Apache nifi kullanmak istiyorum?JSON'u ayırdıktan sonra nitelikleri almak ve bu öznitelikleri invokeHttp işlemcisinde yinelemeli olarak kullanmak için Apache NiFi'yi nasıl kullanabilirim?

Temelde 2 API'ler sayesinde verilere erişim ediyorum: Ben istiyorum Şimdi

{ 
    "response": { 
    "version":"0.1", 
    "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", 
    "features": { 
    "conditions": 1 
    } 
     , "results": [ 
     { 
     "name": "Keyhole", 
     "city": "Keyhole", 
     "state": "WY", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "82721.7.99999", 
     "l": "https://stackoverflow.com/q/zmw:82721.7.99999" 
     } 
     , 
     { 
     "name": "Cuchara Valley Airport At La Veta", 
     "city": "Cuchara Valley Airport At La Veta", 
     "state": "CO", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "81055.6.99999", 
     "l": "https://stackoverflow.com/q/zmw:81055.6.99999" 
     } 
     , 

:

Bu API bana bir JSON dizisi elemanı ABD'de tüm şehirlerin listesini içeren bir JSON dizisi döndürür Bu dizi yineleme ve devlet ve şehir bilgileri kullanmak için aşağıdaki gibi başka bir API kullanılacak:

{ 
    "response": { 
    "version":"0.1", 
    "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", 
    "features": { 
    "conditions": 1 
    } 
    } 
    , "current_observation": { 
     "image": { 
     "url":"http://icons.wxug.com/graphics/wu2/logo_130x80.png", 
     "title":"Weather Underground", 
     "link":"http://www.wunderground.com" 
     }, 
     "display_location": { 
     "full":"San Francisco, CA", 
     "city":"San Francisco", 
     "state":"CA", 
     "state_name":"California", 
     "country":"US", 
     "country_iso3166":"US", 
     "zip":"94101", 
     "magic":"1", 
     "wmo":"99999", 
     "latitude":"37.77500916", 
     "longitude":"-122.41825867", 
     "elevation":"47.00000000" 
     }, 
     "observation_location": { 
     "full":"SOMA - Near Van Ness, San Francisco, California", 
     "city":"SOMA - Near Van Ness, San Francisco", 
     "state":"California", 
     "country":"US", 
     "country_iso3166":"US", 
     "latitude":"37.773285", 
     "longitude":"-122.417725", 
     "elevation":"49 ft" 
     },... 

Böylece temelde ettik bir döngü içinde ikinci API çalıştırmak için İlk API'den aldığım eyalet ve şehir birleşimi olacak.

Şimdiye kadar yaptığım temel NiFi akışı bu soruya eklenmiştir, ancak çalışmıyor. Birisi bana burada ne yaptığımı anlamaya yardım edebilir mi? yorumlarda maruz sorunları cevaplama

SplitJson Processor Configuration

+0

/görünüyor: ihtiyacınız olacak bir şey URL kodlamak şehir ve devlet EL "UrlEncode" seçeneğini kullanarak şöyle etmektir bilgileri bilmek ister misiniz? URL olarak kodlanmış veya içerik olarak gönderilen başlık olarak mı? – JDP10101

+0

İkinci API'nın URL'sindeki şehir/eyalet bilgilerini şu adresten kullanacağım: api.wunderground.com/api/key/conditions/q/${state}/${city}.j‌ son Bu işlemci için ilk API –

+0

'dan alacağım farklı eyalet/şehir kombinasyonları için bir işlemci nasıl uygulanacağını lütfen öneriniz. Bu uygulama için uygun konfigürasyonda, resimde gördüğünüz akış kullanılabilir. Fark ettiğim bir şey, başarı ile bağlantılı olarak tüm ilişkilerin (hatalar ve eşleşmeyenler dahil) yönlendirilmenizin olmasıdır. Bu, neyin işe yaramadığını söylemek için zorlaştırıyor. Hataları başka bir işlemciye (log niteliği gibi) yönlendirirseniz, sorunların nerede olduğunu görebilirsiniz. Ayrıca, emin olmak için, görüntüde bulunan işlemcinin çoğu devre dışı veya geçersiz (düzgün yapılandırılmamış) bu sorunları düzeltdiniz mi ? – JDP10101

cevap

2

Hortonworks Dataflow on HDP 2.4 Sandbox

: Kullanmak istediğiniz SplitJSON JSON yol ifade için

bu sonuçla başına FlowFile içine JSON bölecek *.results.* olduğunu. Değerlendirtiğiniz EvaluateJSONPath yapılandırması güncellenmiş bir SplitJSON ile çalışmalıdır (sadece bir şablonda test edilmiştir).

InvokeHttp URL için sağladığınız İfade Dili (EL) neredeyse var. Eğer doğru yolda ama şehir belirtmek nasıl yürümesi gerektiğine ikinci API çağrısı için konum gibi api.wunderground.com/api/key/conditions/q/${state:urlEncode()}/${city:urlEncode()}.j‌​son

İlgili konular