Как спарсить пользователей вконтакте онлайн?

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
jafar
Сообщения: 27
Зарегистрирован: 28 апр 2013, 09:55

Как спарсить пользователей вконтакте онлайн?

Сообщение jafar » 23 ноя 2014, 20:54

Добрый вечер!
Помогите разобраться. Есть список ID вконтакте, над определить кто в текущий момент онлайн. Это можно посмотреть посредством API. В одном запросе можно задать до 1000 ID. Запрос такого вида:
https://api.vk.com/method/users.get.XML ... lds=online

На выходе имеем xml разметку:

<?xml version="1.0" encoding="UTF-8"?>
-<response list="true">
-<user>
<uid>111111111</uid>
<first_name>DELETED</first_name>
<last_name/>
<deactivated>deleted</deactivated>
<online>0</online>
</user>


-<user>
<uid>222222222</uid>
<first_name>Саша</first_name>
<last_name>Иванов</last_name>
<online>0</online>
</user>
</response>

Те кто онлайн, в поле <online>0</online> будет 1.
Не могу вытянуть данные с этой страницы. $webpage->get_body_inter_prefix_all не работает. А как ещё это можно сделать?
Или может есть какой то другой способ? На выходе нужен список ID тех кто сейчас онлайн. Буду рад любому решению. Заранее спасибо.

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение bok2007 » 24 ноя 2014, 22:46

Код: Выделить всё

$xml = '<?xml version="1.0" encoding="UTF-8"?>
-<response list="true">
-<user>
<uid>111111111</uid>
<first_name>DELETED</first_name>
<last_name/>
<deactivated>deleted</deactivated>
<online>0</online>
</user>

<user>
<uid>222222222</uid>
<first_name>Саша</first_name>
<last_name>Иванов</last_name>
<online>1</online>
</user>
</response>';

preg_match_all('#<uid>([^<]+)</uid>.+?<online>([^<]+)</online>#is', $xml, $match);

$online = array();

for ($i = 0; $i < count($match[1]); $i++) {
      if ($match[2][$i] == 1) $online[] = $match[1][$i];
}

print_r($online);

jafar
Сообщения: 27
Зарегистрирован: 28 апр 2013, 09:55

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение jafar » 26 ноя 2014, 10:06

bok2007 спасибо.
А как переменной $xml присвоить текст страницы?
get_source и get_body не получается.

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение bok2007 » 26 ноя 2014, 10:38

jafar писал(а):bok2007 спасибо.
А как переменной $xml присвоить текст страницы?
get_source и get_body не получается.

Код: Выделить всё

$xml = $webpage->get_body();

jafar
Сообщения: 27
Зарегистрирован: 28 апр 2013, 09:55

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение jafar » 26 ноя 2014, 12:48

bok2007 писал(а):
jafar писал(а):bok2007 спасибо.
А как переменной $xml присвоить текст страницы?
get_source и get_body не получается.

Код: Выделить всё

$xml = $webpage->get_body();
Я ж говорю, так не получается (

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение bok2007 » 26 ноя 2014, 13:45

jafar писал(а):
bok2007 писал(а):
jafar писал(а):bok2007 спасибо.
А как переменной $xml присвоить текст страницы?
get_source и get_body не получается.

Код: Выделить всё

$xml = $webpage->get_body();
Я ж говорю, так не получается (
Должно получаться. В главной вкладке браузера ответ от ВК приходит или в новом окне?

jafar
Сообщения: 27
Зарегистрирован: 28 апр 2013, 09:55

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение jafar » 26 ноя 2014, 15:47

не получается. Даже если вот так делаю, и всё равно пусто:
echo $xml = $webpage->get_body();

Открывается в главной вкладке. Делаю вот так:
$browser->navigate('https://api.vk.com/method/users.get.XML ... lds=online');

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение bok2007 » 26 ноя 2014, 16:19

jafar писал(а):не получается. Даже если вот так делаю, и всё равно пусто:
echo $xml = $webpage->get_body();

Открывается в главной вкладке. Делаю вот так:
$browser->navigate('https://api.vk.com/method/users.get.XML ... lds=online');

Код: Выделить всё

$xml = $webpage->get_source();
Но тут можно обойтись и обычными средствами PHP:

Код: Выделить всё

$xml = file_get_contents("https://api.vk.com/method/users.get.XML?user_ids=111111111,222222222&fields=online");

jafar
Сообщения: 27
Зарегистрирован: 28 апр 2013, 09:55

Re: Как спарсить пользователей вконтакте онлайн?

Сообщение jafar » 03 дек 2014, 21:16

ещё раз спасибо, всё работает

Ответить