За последние 24 часа нас посетили 67010 программистов и 1641 робот. Сейчас ищут 944 программиста ...

Граббер анаграмм

Тема в разделе "PHP для новичков", создана пользователем EndoCrinolog, 22 фев 2014.

  1. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Делаю граббер анаграмм для одного сайта. Чтобы, так сказать, быстрее расшифровывать в игровом чате. Постер чата работает, анаграммы грабит без проблем. Проблема возникает в их расшифровке, когда я подключаюсь к сайту расшифровки через cURL и получаю готовый результат. Сначала хотел взять сайт из первой строчки поиска: http://4maf.ru/anagram.php, но он работает через ajax, передает туеву хучу переменных, поэтому выбрал попроще: http://anagramizer.com/find-anagram . Этот сайт передает данные через GET и выводит готовый результат. Пример: http://anagramizer.com/find-anagram?word=рпивте
    Тут-то и скрывается проблема. Вот участок кода, который отправляет данные на этот сайт через GET:
    Код (Text):
    1. $anasite = "http://anagramizer.com/find-anagram?word=".$anagramm;
    2.  
    3. echo "$anasite<hr/>";
    4.  
    5. if( $curl = curl_init() ) { // CURL anagramm
    6. curl_setopt($curl, CURLOPT_URL, $anasite);
    7. curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    8. $page3 = iconv("utf-8", "cp1251", curl_exec($curl));
    9. curl_close($curl);
    10.  
    11. echo $page3;
    12.  
    13. } else { // CURL anagramm
    14. echo "Cant curl";
    15. } // CURL anagramm
    Вот результат ее работы:
    Как видите, данные будто не передаются... Почему так происходит и как это решить?
    P.S. urlencode() для слова пробовал, не работает.
    P.P.S. Кстати, не буду против, если кто сможет грабить расшифровку с http://4maf.ru/anagram.php
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. function get_anagram($word){
    2.     $url = 'http://4maf.ru/anagram_ajax.php';
    3.     $query_data = "sourceword=$word&ModType=1&minf=0&yo=1";
    4.  
    5.     $ch = curl_init();
    6.     curl_setopt($ch,CURLOPT_URL, $url);
    7.     curl_setopt($ch,CURLOPT_POST, true);
    8.     curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    9.     curl_setopt($ch,CURLOPT_POSTFIELDS, $query_data);
    10.     $result = curl_exec($ch);
    11.     curl_close($ch);
    12.     
    13.     return $result;
    14. }
    15.  
    16.  
    17. echo get_anagram('рпивте');
    Остальное сам сделай.

    Добавлено спустя 8 минут 48 секунд:
    4 это так много?
     
  3. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Вот ответ:
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    У меня все работает.
    Значить что то криво делаешь.
    Показывай код.
     
  5. imoisey

    imoisey Активный пользователь

    С нами с:
    27 янв 2014
    Сообщения:
    113
    Симпатии:
    0
    У меня тоже работает

    Запрос:

    [​IMG]

    Ответ:

    [​IMG]
     
  6. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Очень много говнокода. Будьте аккуратны
    Код (Text):
    1. <?php
    2.  
    3. function get_anagram($word){
    4.     $url = 'http://4maf.ru/anagram_ajax.php';
    5.     $query_data = "sourceword=$word&ModType=1&minf=0&yo=1";
    6.  
    7.     $ch = curl_init();
    8.     curl_setopt($ch,CURLOPT_URL, $url);
    9.     curl_setopt($ch,CURLOPT_POST, true);
    10.     curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    11.     curl_setopt($ch,CURLOPT_POSTFIELDS, $query_data);
    12.     $result = iconv("utf-8", "cp1251", curl_exec($ch));
    13.     curl_close($ch);
    14.    
    15.     return $result;
    16. }
    17.  
    18. set_time_limit(0);
    19.  
    20. require_once("simple_html_dom.php");
    21.  
    22. $sessa = "SESS=3m94k30a2uhr6b6s7dgvv7k6u0";
    23. $pass = "%80%B0%B2%E3%5C2w%7D%C7%CCI%F4";
    24.  
    25. $rooms = "http://foiz.ru/chat/";
    26.  
    27. if($curl = curl_init()) { // CURL
    28. curl_setopt($curl, CURLOPT_URL, $rooms);
    29. curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    30. curl_setopt($curl, CURLOPT_COOKIE, "id_user=17321;pass=".$pass.";".$sessa);
    31. $page = iconv("utf-8", "cp1251", curl_exec($curl));
    32. curl_close($curl);
    33.  
    34. if ($page){ // PAGE
    35.  
    36. $html = str_get_html($page);
    37.  
    38. foreach($html->find('a[href*=room\/14\/]') as $href) {
    39. $room = $href->href;
    40. }
    41.  
    42. $html->clear();
    43. unset($html);
    44.  
    45. $room = "http://foiz.ru" . $room;
    46.  
    47. if($curl = curl_init()) { // CURL room
    48. curl_setopt($curl, CURLOPT_URL, $room);
    49. curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    50. curl_setopt($curl, CURLOPT_COOKIE, "id_user=17321;pass=".$pass.";".$sessa);
    51. $page2 = iconv("utf-8", "cp1251", curl_exec($curl));
    52. curl_close($curl);
    53.  
    54. $html = str_get_html($page2);
    55.  
    56. $n = 0;
    57.  
    58. foreach($html->find('div[class=rowdown]') as $div) { // foreach
    59.  
    60. if ($n == 0){ // n
    61. $data = $div->innertext;
    62.  
    63. $mystring = $data;
    64. $findme   = "<strong>Анаграмма:</strong> ";
    65. $pos = strpos($mystring, $findme);
    66.  
    67. if ($pos === false) { // pos
    68. echo <<<EOD
    69. <title>Не найдено</title>
    70. Этот пост не является анаграммой
    71. <meta http-equiv="refresh" content="3">
    72. EOD;
    73. } else { // pos
    74.  
    75. $data = str_replace("<span style=\"color:\"> ","",$data);
    76. $data = str_replace("<strong>Анаграмма:</strong> ","",$data);
    77. $data = str_replace("</span>","",$data);
    78. $data = str_replace("<br />","",$data);
    79.  
    80. $dataArr = explode(" ",$data);
    81.  
    82. $anagramm = $dataArr[2];
    83.  
    84. echo <<<EOD
    85. <title>Найдено</title>
    86. <b>НАЙДЕНА АНАГРАММА:</b> $anagramm<hr/>
    87. EOD;
    88.  
    89. echo get_anagram($anagramm);
    90.  
    91. } // pos
    92.  
    93. $n++;
    94. } // n
    95.  
    96. } // foreach
    97.  
    98. $html->clear();
    99. unset($html);
    100.  
    101. } else { // CURL room
    102. echo "Cant cURL\n";
    103. } // CURL room
    104.  
    105. } else { // PAGE
    106. echo "no page\n";
    107. } // PAGE
    108.  
    109. } else { // CURL
    110. echo "Cant cURL\n";
    111. } // CURL
    112.  
    113. ?>
    Добавлено спустя 23 минуты 19 секунд:
    Даже в отдельный файл поместил - тот же результат...
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну не может быть что бы у меня и у imoisey работал код а у тебя нет.
    Проверь что ты отправляешь.Раз пишется
    значить посылаешь что то лишнее.
     
  8. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Добавлено спустя 1 минуту 41 секунду:
    Вообще ничего лишнего.. Взял Вашу функцию, отправляю в нее переменную $anagramm. Больше ничего

    Добавлено спустя 1 минуту 3 секунды:
    Проверьте точно ВАШИ коды.. Может Вы чего там добавили...
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    и что ты хотел сказать?

    Если честно я могу целый день гадать как ты копируешь что ты делаешь.
    Мне сложно представить как надо скопировать что бы этот код не заработал.
    У меня пока нет идей почему у тебя не работает, может у других телепатия лучше развита...

    Добавлено спустя 1 минуту 30 секунд:
    Наши коды и днк в полном порядке. Проверено годами:)
     
  10. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Шутки-шутками.. Я-то выслал всё, как есть...
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну не знаю создай отдельный файл php UTF-8 без BOM скопируй то что я дал, вызови файл. Вот и вся магия.
    Если не заработает будем ждать imoisey пусть он расскажет свою уникальную технику копирования.
     
  12. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    ПЕРЕСОХРАНЕНИЕ В UTF-8 ПОМОГЛО!

    Добавлено спустя 3 минуты 20 секунд:
    Всё, разобрался. Нужно было только слово в utf-8 преобразовать...
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Выстави в IDE или редакторе где ты пишешь кодировку по дефолту UTF-8 без BOM.
    Много гемора с кодировками исчезнет.
     
  14. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Программа работает. Слово дешифруется и отправляется на сервер...