POST-запрос с помощью CURL, Maximum execution time Error

12
Sanu0074
На сайте с 31.08.2012
Offline
110
1260

Здравствуйте!

Есть страничка: https://play.google.com/store/apps/details?id=com.miniclip.plagueinc

Пытаюсь из нее вытащить комментарии, там первоначально загружается 6шт комментов, после нажатия кнопки слева, загружаются асинхронно постранично остальные. Я решил достать комментарии со 2й страницы, как бы сэмулировать клик по кнопке и получить данные. Отследил запрос firebug'oм, для получения след. комментов посылается запрос сюда: https://play.google.com/store/getreviews, с такими параметрами: reviewType=0&pageNum=2&id=com.miniclip.plagueinc&reviewSortOrder=2&xhr=1, ответ приходит в виде JSON. Посмотрел все заголовки и написал скрипт который должен загрузить этот JSON:


$header [] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header [] = "Accept-Encoding: gzip, deflate";
$header [] = "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
$header [] = "Cache-Control: no-cache";
$header [] = "Connection: keep-alive";
$header [] = "Content-Length: 72";
$header [] = "Content-Type: application/x-www-form-urlencoded;charset=utf-8";
$header [] = "Cookie: NID=67=vlnMin-sHA_LK1k3p6XFYkayH6mxiFj5EISlCAN9vzT4Ne8650gsz6k40ERleX7JlQ9Gkk_mSOJvd2CFauZc4iVJAUUezJMH6qNoFX_Prq0AmSo9w_4c5FnaLiCLuQ7y; PLAY_PREFS=CgJVQRCate7v3Sg:S:ANO1ljKg98AGVDcg";
$header [] = "Host: play.google.com";
$header [] = "Pragma: no-cache";
$header [] = "Referer: https://play.google.com/store/apps/details?id=com.miniclip.plagueinc";
$user_agent='User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0';
$ch = curl_init("https://play.google.com/store/getreviews");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "reviewType=0&pageNum=2&id=com.miniclip.plagueinc&reviewSortOrder=2&xhr=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$text = curl_exec($ch);
curl_close($ch);
echo $text;

Но данный скрипт виснет, выдает в окончании:

Fatal error: Maximum execution time of 90 seconds exceeded in E:\sites_data\home-android\ on line 22

В чем здесь проблема? обычные странички с этого сайта грузятся внорме, а вот загрузить этот json с комментами не получается....

Sanu0074
На сайте с 31.08.2012
Offline
110
#1

Подладил, уже работает. Но ответ приходит в таком формате (куски текста укоротил чтоб влезли в сообщение):

)]}' [["ecr",1," \u003cdiv class\u003d\"single-review\"\u003e \u003ca href\u003d\"/store/people/details?id\u003d105572155730709206326\"\u003e \u003cimg class\u003d\"author-image\" alt\u003d\"Виктор Колесников avatar image\" src\u003d\"https://lh3.googleusercontent.com/-XYAkRhiR7B4/AAAAAAAAAAI/AAAAAAAAADU/kt11kyhTPsQ/w48-c-h48/photo.jpg\"\u003e \u003c/a\u003e \u003cdiv class\u003d\"review-header\" data-expand-target\u003d\"\" data-reviewid\u003d\"gp:AOqpTOF2CuaRvUm6WRCy4IAPBEJlzL7LDFWi4hszo0DztudcV-IwkpFibG8931Xh0Y9opyTiy-HVBMxthKpBVho\"\u003e \u003cdiv class\u003d\"review-info\"\u003e \u003cspan class\u003d\"author-name\"\u003e \u003ca href\u003d\"/store/people/details?id\u003d105572155730709206326\"\u003eВиктор Колесников\u003c/a\u003e \u003c/span\u003e \u003cspan class\u003d\"review-date\"\u003e5 мая 2014 г.\u003c/span\u003e \u003ca class\u003d\"reviews-permalink\" href\u003d\"/store/apps/details?id\u003dcom.miniclip.plagueinc\u0026amp;reviewId\u003dZ3A6QU9xcFRPRjJDdWFSdlVtNldSQ3k0SUFQQkVKbHpMN0xERldpNGhzem8wRHp0dWRjVi1Jd2twRmliRzg5MzFYaDBZOW9weVRpeS1IVkJNeHRoS3BCVmhv\" title\u003d\"Ссылка на этот отзыв\"\u003e\u003c/a\u003e \u003cdiv class\u003d\"review-source\" style\u003d\"display:none\"\u003e\u003c/div\u003e \u003cdiv class\u003d\"review-info-star-rating\"\u003e \u003cdiv class\u003d\"tiny-star star-rating-non-editable-container\"\u003e \u003cdiv class\u003d\"current-rating\" style\u003d\"width: 80%;\"\u003e\u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"rate-review-wrapper\"\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Спам\" data-rating\u003d\"SPAM\"\u003e \u003cdiv class\u003ddetails?id\u003d117725364611869863990\"\u003e \u003cimg class\u003d\"author-image\" alt\u003d\"Миха Шукаев avatar image\" src\u003d\"https://lh5.googleusercontent.com/-oYABnxn1Ogg/AAAAAAAAAAI/AAAAAAAAABo/-oiR8Dx5pg0/w48-c-h48/photo.jpg\"\u003e \u003c/a\u003e \u003cdiv class\u003d\"review-header\" data-expand-target\u003d\"\" data-reviewid\u003d\"gp:AOqpTOE7wMWaQamrbe35uIY0QmOpJzfcmwjjjCJ6Hs1Xn4HwKmgGypXB_mT6fZIlkv1-vkPw-3olUryyyE2OU6E\"\u003e \u003cdiv class\u003d\"review-info\"\u003e \u003cspan class\u003d\"author-name\"\u003e \u003ca href\u003d\"/store/people/details?id\u003d117725364611869863990\"\u003eМиха Шукаев\u003c/a\u003e \u003c/span\u003e \u003cspan class\u003d\"review-date\"\u003e7 мая 2014 г.\u003c/span\u003e \u003ca class\u003d\"reviews-permalink\" href\u003d\"/store/apps/details?id\u003dcom.miniclip.plagueinc\u0026amp;reviewId\u003dZ3A6QU9xcFRPRTd3TVdhUWFtcmJlMzV1SVkwUW1PcEp6ZmNtd2pqakNKNkhzMVhuNEh3S21nR3lwWEJfbVQ2ZlpJbGt2MS12a1B3LTNvbFVyeXl5RTJPVTZF\" title\u003d\"Ссылка на этот отзыв\"\u003e\u003c/a\u003e \u003cdiv class\u003d\"review-source\" style\u003d\"display:none\"\u003e\u003c/div\u003e \u003cdiv class\u003d\"review-info-star-rating\"\u003e \u003cdiv class\u003d\"tiny-star star-rating-non-editable-container\"\u003e \u003cdiv class\u003d\"current-rating\" style\u003d\"width: 100%;\"\u003e\u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"rate-review-wrapper\"\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Спам\" data-rating\u003d\"SPAM\"\u003e \u003cdiv class\u003d\"icons?id\u003d104495738783025553197\"\u003e \u003cimg class\u003d\"author-image\" alt\u003d\"Саша Ткач avatar image\" src\u003d\"https://lh6.googleusercontent.com/-B6qQnOA5RQ8/AAAAAAAAAAI/AAAAAAAAABI/SkiNc74YvOQ/w48-c-h48/photo.jpg\"\u003e \u003c/a\u003e \u003cdiv class\u003d\"review-header\" data-expand-target\u003d\"\" data-reviewid\u003d\"gp:AOqpTOGe5gRH7P60gJhYcbk6Mr_lxxdsEflcsn_BNzZ4dLX7ip3YfNnCCS0Yh97M79VYfLBJQ2LHU8VsHB6gcaA\"\u003e \u003cdiv class\u003d\"review-info\"\u003e \u003cspan class\u003d\"author-name\"\u003e \u003ca href\u003d\"/store/people/details?id\u003d104495738783025553197\"\u003eСаша Ткач\u003c/a\u003e \u003c/span\u003e \u003cspan class\u003d\"review-date\"\u003e6 мая 2014 г.\u003c/span\u003e \u003ca class\u003d\"reviews-permalink\" href\u003d\"/store/apps/details?id\u003dcom.miniclip.plagueinc\u0026amp;reviewId\u003dZ3A6QU9xcFRPR2U1Z1JIN1A2MGdKaFljYms2TXJfbHh4ZHNFZmxjc25fQk56WjRkTFg3aXAzWWZObkNDUzBZaDk3TTc5VllmTEJKUTJMSFU4VnNIQjZnY2FB\" title\u003d\"Ссылка на этот отзыв\"\u003e\u003c/a\u003e \u003cdiv class\u003d\"review-source\" style\u003d\"display:none\"\u003e\u003c/div\u003e \u003cdiv class\u003d\"review-info-star-rating\"\u003e \u003cdiv class\u003d\"tiny-star star-rating-non-editable-container\"\u003e \u003cdiv class\u003d\"current-rating\" style\u003d\"width: 100%;\"\u003e\u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"rate-review-wrapper\"\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Спам\" data-rating\u003d\"SPAM\"\u003e \u003cdiv class\u003d\"icon spam-flag\"\u003e\u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"play-button icon-butTaTcwZGRYeGg1SzB1TVVNRXF1c2pr\" title\u003d\"Ссылка на этот отзыв\"\u003e\u003c/a\u003e \u003cdiv class\u003d\"review-source\" style\u003d\"display:none\"\u003e\u003c/div\u003e \u003cdiv class\u003d\"review-info-star-rating\"\u003e \u003cdiv class\u003d\"tiny-star star-rating-non-editable-container\"\u003e \u003cdiv class\u003d\"current-rating\" style\u003d\"width: 100%;\"\u003e\u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"rate-review-wrapper\"\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Спам\" data-rating\u003d\"SPAM\"\u003e \u003cdiv class\u003d\"icon spam-flag\"\u003e\u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Полезный\" data-rating\u003d\"HELPFUL\"\u003e \u003cdiv class\u003d\"icon thumbs-up\"\u003e\u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"play-button icon-button small rate-review\" title\u003d\"Бесполезный\" data-rating\u003d\"UNHELPFUL\"\u003e \u003cdiv class\u003d\"icon thumbs-down\"\u003e\u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class\u003d\"review-body\"\u003e \u003cspan class\u003d\"review-title\"\u003eбесплатно\u003c/span\u003e Ув. разработчики,пожалуйста, сделайте игру бесплатной.Просто не хочется платить за лучшие игры. \u003cdiv class\u003d\"review-link\" style\u003d\"display:none\"\u003e \u003ca class\u003d\"id-no-nav play-button tiny\" href\u003d\"#\" target\u003d\"_blank\"\u003eЧитать дальше\u003c/a\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e ",3] ]

Браузер это показывает вот так:

����o�Xv���_�IQ�A-�oI3��%ʖ%ʢ���S|ɢD��D=�y`:�H:��[,��N��[��'�8����{/eǑlǙdw/��.�����ѹ׷�������կnYF�� �r�t���a�C�p�~}4?�շ�]�J���m�>���-l�[�Z=�y�u�x=kͷ<߱�L+�l��Kی�x��)��	*�N�h�NS�� �������k����vW۵>��iNpr'�:|>��	�����0< ����>H�1m�Z;)��'%[A��?^[sZ������ �V����r�U���%�+�V�J�Fk�������Z��C��͵�k#:�0-:�淼�[m��#[�Nf�f8Ѳ4������	k�k��#ٵN�~r3*q2�����?�T�|��e6ٜ%���iq]��P�tN�!���������&���&N�([CYb��^Тs�|�V+5k\3�����י��H�sQ�m������H]�k-�}o���X���3���I˝�L�i�I,|�Ͼ�H������ru'�;��~·z]ͱ��9��|��4z���]۵ ��W}G�X���d���IT��<�Jeت���-t�"����y���P GS!��e.5�;<� ��k��7Q�֤&f�u�,��*������yaK�L_��E��ڰrrQ������x%ș�9 ���N��gwg�,����>6��ٽ�xv�?�g����i]����Ri�Ū���z#�1^*� 肠��]�ތ��п�jmF��b½�'�vx�v2V����X�v������/ ���T��|��:�P������XeH�G�����X�L04U-W1�\�n������2p����P|uk��L�6�����c]̀�����Ѿ0��RO�3�xi��^ �I�(�qǮ=giq|�%%�R� �Lo�cd�-��iߜ����m8���8�kP]����j�$�}���

Функция json_decode($text,TRUE), возвращает пустой массив. Почему так? данные вродеб как в JSON...

---------- Добавлено 09.05.2014 в 03:37 ----------

Такие заголовки содержатся в ответе:


HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Disposition: attachment; filename="response.txt"
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Thu, 08 May 2014 23:36:49 GMT
Content-Encoding: gzip
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic
SocFishing
На сайте с 26.09.2013
Offline
118
#2
)]}' [["ecr",1," \u003cdiv class\u0

напишите конкретно (файл) что вы пытаетесь переводить в json_decode

в данном тексте ошибки, так же возможны ошибки в кодировке, при которых json_decode будет возвращать ноль.

https://play.google.com/store/apps/details?id=com.miniclip.plagueinc&reviewType=0&pageNum=0&id=com.miniclip.plagueinc&reviewSortOrder=2&xhr=1

явно не в формате json возвращает

)]}'

нужно вырезать.

★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
J
На сайте с 20.02.2014
Offline
120
jkm
#3

Добавление мусора к json ответам уже когда-то обсуждалось.

http://habrahabr.ru/post/168461/

И кстати, сами в заголовках разрешили gzip, а CURLOPT_ENCODING не задали.

Так что либо


$text = gzdecode($text);

либо заменить


$header [] = "Accept-Encoding: gzip, deflate";

на


curl_setopt($ch, CURLOPT_ENCODING , "gzip");
Sanu0074
На сайте с 31.08.2012
Offline
110
#4

Спасибо, теперь работает, но приходится обрезать этот кусок ")]}' " с помощью substr();

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

SocFishing
На сайте с 26.09.2013
Offline
118
#5

Может как-то так

<?php
$json = ")]}' [[\"ecr\",1]] 89";

preg_match_all('|\[\[(.*)\]\]|sei', $json, $result);
print_r($result[0]);
?>

Вывод от первого [[ до последнего ]]

Sanu0074
На сайте с 31.08.2012
Offline
110
#6

SocFishing, где-то ошибка, пустой массив возвращает

SocFishing
На сайте с 26.09.2013
Offline
118
#7

мне бы пример этого массива

<?php
preg_match_all('|\[\[(.*)\] \]|sei', $json, $result);
print_r($result[0]);
?>

а так

Sanu0074
На сайте с 31.08.2012
Offline
110
#8

SocFishing, тоже нет, вот пример ответа

txt text.txt
SocFishing
На сайте с 26.09.2013
Offline
118
#9
<?php
$json = file_get_contents('text.txt');

preg_match_all('|\[\[(.*)\] \]|sei', $json, $result);
print_r($result[0]);
?>

у меня работает =\\

вначале [[ в конце ] ]

Sanu0074
На сайте с 31.08.2012
Offline
110
#10

странно, у меня возвращает в $result

Array
(
[0] => Array
(
)

[1] => Array
(
)

)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий