У меня есть следующий код:
preg_match_all('/"([^"]*)"/', $json , $results);
var_dump($json);var_dump($results);die();
На данный момент дамп $json
имеет
string(423) "{"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg";[355,266],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg":[425,319],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg":[466,350],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg":[450,338],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg":[500,375]}"
Я пытаюсь получить ссылки. Ive попробовал json_decode
но я получаю ошибку номер 4, которая является неправильным синтаксисом. Нет невидимых символов спереди или после JSON на строке. Без везения я решил попробовать в нем регулярное выражение, но приведенный выше код вернется
array(2) { [0]=> array(0) { } [1]=> array(0) { } }
Любая помощь, чтобы получить первый первый, будет очень благодарна.
Хорошо, как некоторые из вас отметили, что это в основном хак, чтобы заставить его работать независимо от того, что. Если вы заинтересованы в том, чтобы сделать это правильно, заполните полную информацию:
$ch = curl_init("http://rads.stackoverflow.com/amzn/click/B00BEL2G4C");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt" );
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt" );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
$curl_scraped_page = curl_exec($ch);
$html = $html->load($curl_scraped_page);
$json = $html->find('#imageBlock', 0)->children[0]->children[0]->children[1]->children[1]->children[0]->children[2]->children[0]->children[0]->children[0]->children[0]->children[0]->attr['data-a-dynamic-image'];
$json = utf8_encode($json);
var_dump(json_decode($json));var_dump(json_last_error());die();
Я знаю, что у Amazon есть API, но они раздражают и позволят вам использовать его только в том случае, если вы являетесь аффилированным лицом, и они не принимают под строительство веб-сайтов в качестве аффилированных лиц, поэтому я просто пытаюсь получить это и изменит его на API после того, жить и получать одобрение для амазонских веток.
URL-адрес фактически динамический, он просто используется для тестирования в статическом. Я хотел бы найти решение JSON, поскольку это было бы намного чище.
Сделай это -
$parsed = json_decode($json, true);
foreach($parsed as $row=>$value){
echo $row .'<br>';
}
Не уверен, почему он не работает. Это работает для меня:
<?php
$json ='{"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg": [355,266],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg":[425,319],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg":[466,350],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg":[450,338],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg":[500,375]}';
preg_match_all('/"([^"]*)"/', $json , $results);
var_dump($json);var_dump($results);die();
?>
Выход:
gregp:~ greg$ php ./test.preg.php
string(373) "{"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg":[355,266],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg":[425,319],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg":[466,350],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg":[450,338],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg":[500,375]}"
array(2) {
[0]=>
array(5) {
[0]=>
string(65) ""http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg""
[1]=>
string(65) ""http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg""
[2]=>
string(65) ""http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg""
[3]=>
string(65) ""http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg""
[4]=>
string(57) ""http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg""
}
[1]=>
array(5) {
[0]=>
string(63) "http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg"
[1]=>
string(63) "http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg"
[2]=>
string(63) "http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg"
[3]=>
string(63) "http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg"
[4]=>
string(55) "http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg"
}
}
Просто сделайте неживое соответствие между
preg_match_all('/"(.*?)"/', $json , $results);
var_dump($json);var_dump($results);die();
Поэтому мне пришлось выполнить $json = preg_replace('/"/', '"', $json);
перед вызовом декодирования и исправлением моей проблемы.