1

I Have some Json respons like this.

{
    "status": "active",
    "city": "depok",
    "name": "Alternatif Cibubur",
    "lat": -6.376057,
    "thumbnail_html": "\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n",
    "lon": 106.900786,
    "id": 248,
    "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
  }

as you can see, in the "thumbnail_html" path, there is an image url attached

{
    "status": "active",
    "city": "depok",
    "name": "Alternatif Cibubur",
    "lat": -6.376057,
    "thumbnail_html": "https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg",
    "lon": 106.900786,
    "id": 248,
    "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
  }

I have actually tried using the str_replace and preg_replace statements, but the statement is too complicated and long, is there an easier way to retrieve the image URL?

3 Answers3

1

This regex can do work:

$subject = '\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n';
$matches = [];
preg_match('/(https?:\/\/.*\.(?:png|jpg))/i', $subject, $matches);

var_dump($matches);
symfonydevpl
  • 567
  • 1
  • 6
  • 20
1

Try this

<?php
$string = '\n\n\n\n\n\n<div class="cam-thumb">\n  \n    \n      <a href="/cam/248/alternatif-cibubur/">\n        <img src="https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg" class="cam-thumb-img">\n      </a>\n    \n  \n\n  <div class="cam-thumb-info">\n    <p class="cam-name"><a href="/cam/248/alternatif-cibubur/">Alternatif Cibubur</a></p>\n 
</div>\n</div>\n\n\n';

preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match);

echo "<pre>";
print_r($match[0]); 
echo "</pre>";

output:

Array
(
    [0] => https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg
)
Siddhartha esunuri
  • 1,104
  • 1
  • 17
  • 29
1

It is not recommended to parse html with regex.

You could use DOMDocument:

$data = <<<'DATA'
{
    "status": "active",
    "city": "depok",
    "name": "Alternatif Cibubur",
    "lat": -6.376057,
    "thumbnail_html": "\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n",
    "lon": 106.900786,
    "id": 248,
    "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
  }
DATA;

$obj = json_decode($data);
$dom = new DOMDocument();
$dom->loadHTML($obj->thumbnail_html);
$obj = $dom->getElementsByTagName('img');
echo $dom->getElementsByTagName('img')->item(0)->getAttribute("src");

That would give you:

https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg

Demo

The fourth bird
  • 154,723
  • 16
  • 55
  • 70