2017-07-24 91 views
1

首先對不起我的英文不好。編程新手(2年拼貼)。我試圖從zomato獲取圖像。是的,API只給我們鏈接。 (https://www.zomato.com/jakarta/ayam-keprabon-express-tambora/photos),所以我需要手動從網絡上獲取圖像。使用Jsoup獲取圖像

我已經在使用假名的iOS中完成了這項工作。

func parseHTML(html:String){ 
    if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8){ 
     for show in doc.css("div[class^='photobox']"){ 
      let getA = show.css("a").first 
      let image = getA!.css("img[class^='res-photo']").first?["data-original"] 
      let imageUrl = image!.components(separatedBy: "?")[0] 
      linkImageArray.append(imageUrl) 
      print("jumlah gambar = \(linkImageArray.count)") 
     } 
    } 
    foodCV.reloadData() 
} 

而我的問題如何在Jsoup做到這一點?

這怎麼弄到HTML

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body().toString()); 
      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

現在即時通訊堅持了這一點。 Photobox.toString爲空。

public void getPhotos(String stringResponse){ 
    Document doc = Jsoup.parse(stringResponse); 
    Elements photobox = doc.getElementsByClass("container"); 
    Log.i("html : ",""+photobox.toString()); 
    Toast.makeText(this, photobox.toString(), Toast.LENGTH_SHORT).show(); 
    for (Element data:photobox){ 
     Log.i("html : ",""+data.select("img[class^='res-photo']")); 
     Log.i("html : ",""+data.select("img[class^='res-photo']").first().select("data-original")); 
     data.select("img[class^='res-photo']").first().select("data-original"); 
    } 
} 

而且我確定我不能使用這個Jsoup: how to get an image's absolute url?。它會返回所有圖像。我想獲得'數據原創'的img。

<img class='res-photo-thumbnail thumb-load lazy-photo-inner' 
     src='https://b.zmtcdn.com/images/photoback.png' 
     title='Coffee Sisters - Coffee Sisters&#039;s photo' 
     alt='Coffee Sisters - Coffee Sisters&#039;s photo' 
     data-original='https://b.zmtcdn.com/data/reviews_photos/e4a/04b8e0669945bfe03fd0789cbd42be4a.jpg?fit=around%7C200%3A200&amp;crop=200%3A200%3B%2A%2C%2A' 
     data-type='res' 
     data-photo_id='u_NDY5NzEwNzI1MD' 
     data-index='27' 
     data-category='all' 
     /> 
+0

的可能的複製[Jsoup:如何獲取圖像的絕對URL](https://stackoverflow.com/questions/4875064/jsoup-how-to-get-an-images-absolute-url) –

+0

@KarlNicholas它會返回所有的img標籤,我只需要與'data-original'獲得img。 – Acless

回答

0

只是改變一些代碼行,我得到我想要的東西〜

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body()); 


      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

我只能改變通過response.body,而不是response.body.string.toString。

public void getPhotos(ResponseBody body){ 
    try { 
     Document doc = Jsoup.parse(body.string()); 
     Elements photobox = doc.select("img[class=res-photo-thumbnail thumb-load lazy-photo-inner]");Toast.LENGTH_SHORT).show(); 
     for (Element data : photobox) { 
      String imagelink = data.attr("data-original").toString(); 
      String[] parts = imagelink.split("[?]"); 
      imageList.add(parts[0]); 
      Log.i("imagelink : ",parts[0]); 
     } 
    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
}