JSoup, Извлечь указанный c текст или ссылку на изображение с веб-сайта - PullRequest
0 голосов
/ 29 мая 2020

РЕДАКТИРОВАТЬ:

Это в моем HTML, и мне нужно извлечь либо ссылку изображения, либо fileId, чтобы создать ссылку.

{
      "created": "2018-11-06T06:46:21.181Z",
      "inRiverId": "58515",
      "mediaInformation": {
        "bildid": 67708,
        "description": "ABC",
        "excelImportField": "ABC",
        "fileId": "41964",
        "filename": "ABC",
        "imageAccess": true,
        "imageItemType": "ABC",
        "imageStatus": "ABC",
        "imageType": "ABC",
        "itcl": "ABC",
        "photographer": "ABC",
        "projectName": "ABC",
        "projectType": "Webb",
        "type": "Bild",
        "url": "https://static.john.com/images/products/41964.jpg"
      },

Идентификатор файла - это динамический c, поэтому ссылка также является динамическим c в зависимости от статьи, которую я просматриваю на своем веб-сайте. Ссылка всегда начинается с «https://static.john.com/images/products/», а затем автоматически добавляются fileId и «.jpeg».

Приведенный выше код - это, конечно, всего лишь часть кода на веб-сайт, поэтому на нем больше изображений, поэтому его нужно извлечь специально.

Мечта была бы, если бы Jsoup мог получить такой вывод: "https://static.john.com/images/products/" + "fileId" + ".jpeg"

Я новичок в Android Studio и безумно новичок в JSoup. Заранее спасибо!

С уважением, Джон Линдстрём

Ответы [ 2 ]

0 голосов
/ 03 июня 2020

MainActivity. java

public class MainActivity extends AppCompatActivity {

public class JsoupGetImage {

    public void main( String[] args ) throws IOException {

        // Get the article number from TextView to complete link
        String articlenumber = ((TextView) recyclerView.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.holderArticle)).getText().toString();

        // My URL + article number
        String url = "https://www.john.com/api/v1.0/articles/" + articlenumber;

        // JSoup 
        Document doc = Jsoup.connect(url).get();

        // Pattern - Find pattern using partial link
        Pattern p = Pattern.compile("\"url\": \"(https://static.john.com/images/products/\\d+.jp[e]*g)\"");

        // Matcher - Find match in my URL from Pattern
        Matcher m = p.matcher(url);
        if (m.find()) {
            String imageUrl = m.group(1);
            System.out.println(imageUrl);
        }
    }
}
}

Выглядит хорошо, или мне что-то не хватает. Как мне заставить мой ImageView показывать изображение созданной ссылки?

С уважением, Джон

0 голосов
/ 31 мая 2020

Плохие новости. Jsoup не может этого сделать. Jsoup анализирует только HTML, но это фрагмент JSON, который будет использоваться Javascript после загрузки страницы в браузере. Однако моя идея состоит в том, чтобы получить этот URL-адрес с помощью регулярных выражений, поэтому попробуйте использовать этот код:

String json = "{\n" + 
        "      \"created\": \"2018-11-06T06:46:21.181Z\",\n" + 
        "      \"inRiverId\": \"58515\",\n" + 
        "      \"mediaInformation\": {\n" + 
        "        \"bildid\": 67708,\n" + 
        "        \"description\": \"ABC\",\n" + 
        "        \"excelImportField\": \"ABC\",\n" + 
        "        \"fileId\": \"41964\",\n" + 
        "        \"filename\": \"ABC\",\n" + 
        "        \"imageAccess\": true,\n" + 
        "        \"imageItemType\": \"ABC\",\n" + 
        "        \"imageStatus\": \"ABC\",\n" + 
        "        \"imageType\": \"ABC\",\n" + 
        "        \"itcl\": \"ABC\",\n" + 
        "        \"photographer\": \"ABC\",\n" + 
        "        \"projectName\": \"ABC\",\n" + 
        "        \"projectType\": \"Webb\",\n" + 
        "        \"type\": \"Bild\",\n" + 
        "        \"url\": \"https://static.john.com/images/products/41964.jpg\"\n" + 
        "      },";
Pattern p = Pattern.compile("\"url\": \"(https://static.john.com/images/products/\\d+.jp[e]*g)\"");
Matcher m = p.matcher(json);
if (m.find()) {
    String imageUrl = m.group(1);
    System.out.println(imageUrl);
}

, и результат будет: https://static.john.com/images/products/41964.jpg В вашем случае вместо переменной json вы должны использовать document.html().

...