Спарсить данные

Discussion in 'PHP' started by Rastamanka, 30 Jul 2010.

  1. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите плиз.
    В общем имею вот такой скрипт.
    Надо спарсить данные по ссылке но к сожалению ничего не получается хотя вроде все сделано верно.


    PHP:
    <?php

    $data
    ="act=login&data[login]=sdfsdfdsf@mail.ru&data[password]=12345678";
    $fp fsockopen("tmgame.ru"80$errno$errstr10);
    if (
    $fp)
    {
    $out "POST /login.php?mode=xml HTTP/1.1\n";
    $out .= "Host: tmgame.ru\n";
    $out .= "Referer: tmgame.ru/\n";
    $out .= "User-Agent: Opera\n";
    $out .= "Content-Type: application/x-www-form-urlencoded\n";
    $out .= "Content-Length: ".strlen($data)."\n\n";
    $out .= $data."\n\n";
    fputs($fp$out);
      }

    $content file_get_contents('http://tmgame.ru/srv/chat/chat_proc?lChannel=15&xml=1');
    preg_match('#<root error="(.?)"/>#'$content$matches);

    print_r ($matches);

    ?>
     
  2. Dark_cracker

    Dark_cracker Member

    Joined:
    29 May 2009
    Messages:
    73
    Likes Received:
    8
    Reputations:
    1
    PHP:
    preg_match('#<root error="(.*?)" />#'$content$matches); 
    так будет правильно
     
    #2 Dark_cracker, 30 Jul 2010
    Last edited: 30 Jul 2010
  3. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Пасиб заработало.
    Ток вот понять не могу.
    Я нормально залогинилась, но почему при запросе вместо
    PHP:
    <root error="0">
    <
    mesages/>
    <
    status last_grp_id="0" last_prv_id="0" loc_id="479" reload_in="3" message_sent="0" timer="0"/>
    </
    root>
    Выводиться
    PHP:
    <root error="Сессия просрочена"/>
     
  4. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    Надо после авторизации качать не file_get_contentsом, а сокетами или курлом с посылкой куков.
     
    1 person likes this.
  5. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    PHP:
    $data="act=login&data[login]=sdfsdfdsf@mail.ru&data[password]=12345678"
    $fp fsockopen("tmgame.ru"80$errno$errstr10); 
    if (
    $fp

    $out "POST /login.php?mode=xml HTTP/1.1\n"
    $out .= "Host: tmgame.ru\n"
    $out .= "Referer: tmgame.ru/\n"
    $out .= "User-Agent: Opera\n"
    $out .= "Content-Type: application/x-www-form-urlencoded\n"
    $out .= "Content-Length: ".strlen($data)."\n\n"
    $out .= $data."\n\n"

    fputs($fp$out); 

    while(!
    feof($fp)){
    $respons .= fgets($fp1024);
    }
      } 
    Далее алгоритм на псевдокоде.

    PHP:
    $cookies get_cookie($content); 


    $content http_get('http://tmgame.ru/srv/chat/chat_proc?lChannel=15&xml=1'$cookies);

    preg_match('#<root error="(.?)"/>#'$content$matches); 

    print_r ($matches); 
     
  6. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    А где можно подробнее про get_cookie прочитать а то погуглила и ничего толком не нашла.
     
  7. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    Get_cookie - это твоя функция, которую ты должен/на написать. Она вырезает куки из переменной $content, там должна быть строчка типа

    Set-cookie: phpsess=blalalaa

    вот это phpsess=blalalaa и будет результатом работы функции, достать эту строку регуляркой можно.
     
  8. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    забываем про сокеты, забываем про парсинг кукисов...
    Учим CURL и для кукисов заводим файл:
    кукисы нас не касаются, забываем про лишний гемор...