Список форумов Форум Форум
Форум
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   medals.phpНаграды   РегистрацияРегистрация 
 ПрофильПрофиль   СудокуСудоку   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

оставлю здесь
На страницу 1, 2, 3, 4, 5, 6  След.
 
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии
Предыдущая тема :: Следующая тема  
Автор Сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Вт Июл 24, 2012 10:52 am    Заголовок сообщения: оставлю здесь Всего отзывов: 1 Ответить с цитатой

Вечером попробую на денвере запустить.
Интересно. Файлик с 900 000 строками php обработает за минуту-две. Как MySQL отнесется к такому количеству запросов?

Код:
<?php
   class Config{
      var $DB_HOST="localhost";
      var $DB_USER="user";
      var $DB_PASS="pass";
      var $DB_NAME="db";
   }

   class Db extends Config{
      private $connection;
      /*static public $counter;*/

      function __construct(){
         $this->open_connection();
         /*Db::$counter=0;*/
      }

      private function open_connection(){
         $this->connection=mysql_connect($this->DB_HOST,$this->DB_USER,$this->DB_PASS);
         if(!$this->connection){
            die("DB connection failed ".mysql_error());
         }else{
            $db_select=mysql_select_db($this->DB_NAME);
            if(!$db_select){
               die("DB selection failed ".mysql_error());
            }
         }
         mysql_query("set names utf8") or die("set names utf8 failed");
      }
      
      public function sql($query){
         $result=mysql_query($query, $this->connection);
         if(!$result){
            die("DB query failed".mysql_error());
         }
         /*Db::$counter++;*/
         return $result;
      }
   }
   $db=new db();
   
   
   $handle = fopen("mail.txt", "r");
   while (($buffer = fgets($handle, 50)) !== false) {
      /*$buffer=urlencode($budder)."\\n";*/ //implode после извлечения из базы данных с разделителем "\n" и url-энкодом
      $sql="INSERT INTO emails (email) VALUES('{$buffer}'')";
      $test=$db->sql($sql);
   }
   fclose($handle);
   
   /*
   Перегнали все адреса в базу данных.
   
   Запрос:
   http://my.mail.ru/cgi-bin/my/ajax?ajax_call=1&data=[%22

   implode(1000 емейлов из базы данных);
   Храним где-то в файле id последнего обработанного e-mail
   
   %22%2Cnull%2Cnull%2C%22email%22]&encoding=windows-1251&func_name=import.invite&mna=88431&mnb=4060437364
   грузим в фрейме каждые 20 минут (30, 45, 60 - для разных аккаунтов)
   */
?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Вт Июл 24, 2012 11:09 am    Заголовок сообщения: Ответить с цитатой

Код:
<?php
   $file_name="counter.txt";
   if(!file_exists($file_name)){
      $counter=0;
   }else{
      $file=fopen($file_name, 'r');
      $counter=unserialize(fread($file,filesize($file_name)));
      fclose($file);
   }
   $url="http://my.mail.ru/cgi-bin/my/ajax?ajax_call=1&data=[%22";
   $sql="SELECT email FROM emails LIMIT ".$counter.",".$counter+1000;
   $test=$db->sql($sql);
   while ($row = mysql_fetch_assoc($test)){ //$row['email']
      $url.=urlencode($row['email'])."\\n";
   }
   $url.="%22%2Cnull%2Cnull%2C%22email%22]&encoding=windows-1251&func_name=import.invite&mna=88431&mnb=4060437364";
   $counter+=1000;
   $file=fopen($file_name, 'w+');
   $counter=serialize($counter);
   fwrite($file, $counter);
   fclose($file);
?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Вт Июл 24, 2012 11:17 am    Заголовок сообщения: Ответить с цитатой

Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script language='JavaScript' type="text/javascript">
refreshFrame = function(){
 document.getElementById('frame1').location.reload()
 setTimeout(function(){refreshFrame()},3600000)
}
</script>
</head>
<body> 
<iframe src="mails.php" id="frame1"></iframe>
</body>
</html>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 1:31 pm    Заголовок сообщения: Ответить с цитатой

Весь кайф обломала капча. Надо придумать, как ее обойти.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 1:39 pm    Заголовок сообщения: Ответить с цитатой

["AjaxResponse","OK","captcha","673993425"] - json-ответ на мой ajax-запрос. Видим, что mail.ru хочет впарить нам капчу.

Капча формируется скриптом get_image:
http://my.mail.ru/cgi-bin/my/get_image?id=673993425

%22%2C%22673993425%22%2C%22994197%22%2C%22email%22%5D&mna=438693&mnb=4060263358&encoding=windows-1251

после отправки второго Ajax-запроса с введенной капчей - та-же капча уже не работает.

Стало быть, капчу все-же вручную придется вводить. Надо распарсить в php (думаю, функция explode или json_encode) ответ сервера и выдать картинку и формочку, с которой постом будем коннектить к url-у капчку и ответ на нее
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:03 pm    Заголовок сообщения: Ответить с цитатой

Эти файлом вбиваем нашу текстовую базу из 900 000 адресов в базу данных (не забываем поправить в php.ini max_execution_time. Ну хотя-бы полчасика сюда вставим, иначе только по 40 000 адресов за раз обрабатывает)
Spoiler:

Код:
<?php
   class Config{
      var $DB_HOST="localhost";
      var $DB_USER="mailru";
      var $DB_PASS="gfhjkm";
      var $DB_NAME="mailru";
   }

   class Db extends Config{
      private $connection;
      /*static public $counter;*/

      function __construct(){
         $this->open_connection();
         /*Db::$counter=0;*/
      }

      private function open_connection(){
         $this->connection=mysql_connect($this->DB_HOST,$this->DB_USER,$this->DB_PASS);
         if(!$this->connection){
            die("DB connection failed ".mysql_error());
         }else{
            $db_select=mysql_select_db($this->DB_NAME);
            if(!$db_select){
               die("DB selection failed ".mysql_error());
            }
         }
         mysql_query("set names utf8") or die("set names utf8 failed");
      }
     
      public function sql($query){
         $result=mysql_query($query, $this->connection);
         if(!$result){
            die("DB query failed".mysql_error());
         }
         /*Db::$counter++;*/
         return $result;
      }
   }
   $db=new db();
   
   
   $handle = fopen("mail.txt", "r");
   while (($buffer = fgets($handle, 50)) !== false) {
   $buffer=trim($buffer);
      /*$buffer=urlencode($budder)."\\n";*/ //implode после извлечения из базы данных с разделителем "\n" и url-энкодом
      $sql="INSERT INTO emails (email) VALUES('{$buffer}')";
      $test=$db->sql($sql);
   }
   fclose($handle);
   
   /*
   Перегнали все адреса в базу данных.
   
   Запрос:
   http://my.mail.ru/cgi-bin/my/ajax?ajax_call=1&data=[%22

   implode(1000 емейлов из базы данных);
   Храним где-то в файле id последнего обработанного e-mail
   
   %22%2Cnull%2Cnull%2C%22email%22]&encoding=windows-1251&func_name=import.invite&mna=88431&mnb=4060437364
   грузим в фрейме каждые 20 минут (30, 45, 60 - для разных аккаунтов)
   */
?>



Этот файл у нас формирует запрос из 1000 мейлов грузит запрос через фрейм
Spoiler:

Код:

<?php
   class Config{
      var $DB_HOST="localhost";
      var $DB_USER="mailru";
      var $DB_PASS="gfhjkm";
      var $DB_NAME="mailru";
   }

   class Db extends Config{
      private $connection;
      /*static public $counter;*/

      function __construct(){
         $this->open_connection();
         /*Db::$counter=0;*/
      }

      private function open_connection(){
         $this->connection=mysql_connect($this->DB_HOST,$this->DB_USER,$this->DB_PASS);
         if(!$this->connection){
            die("DB connection failed ".mysql_error());
         }else{
            $db_select=mysql_select_db($this->DB_NAME);
            if(!$db_select){
               die("DB selection failed ".mysql_error());
            }
         }
         mysql_query("set names utf8") or die("set names utf8 failed");
      }
     
      public function sql($query){
         $result=mysql_query($query, $this->connection);
         if(!$result){
            die("DB query failed".mysql_error());
         }
         /*Db::$counter++;*/
         return $result;
      }
   }
   $db=new db();


   $file_name="counter.txt";
   if(!file_exists($file_name)){
      $counter=0;
   }else{
      $file=fopen($file_name, 'r');
      $counter=unserialize(fread($file,filesize($file_name)));
      fclose($file);
   }
   $url="http://my.mail.ru/cgi-bin/my/ajax?ajax_call=1&data=[%22";
   $counter2=$counter+1000;
   $sql="SELECT email FROM emails LIMIT ".$counter.",".$counter2;
   $test=$db->sql($sql);
   while ($row = mysql_fetch_assoc($test)){ //$row['email']
      $url.=urlencode($row['email'])."\\n";
   }
   $url.="%22%2Cnull%2Cnull%2C%22email%22]&encoding=windows-1251&func_name=import.invite&mna=88431&mnb=4060437364";
   $counter+=1000;
   $file=fopen($file_name, 'w+');
   $counter=serialize($counter);
   fwrite($file, $counter);
   fclose($file);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="refresh" content="10" />
</head>
<body>
<iframe src="<?php echo $url; ?>" id="frame1"></iframe>
</body>
</html>



Как получить скриптом ответ сервера? Попробуем file_get_contents (с потоковым контекстом через stream_context_create), если не прокатит - будем пытаться использовать самую страшную черную магию (cURL)

Жаль, конечно, что не получилось автоматизировать на столько, на сколько хотел изначально. Но и этот вариант, в принципе, тоже не плох. Запущу где-то в маленьком окошке и буду периодически вводить эту вашу ёбаную капчу, че уж там
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:05 pm    Заголовок сообщения: Ответить с цитатой

Еще одну неприятность заметил. Get-запросом невозможно передать такой объем данных в тот скриптец. Надо придумать обходной путь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:11 pm    Заголовок сообщения: Ответить с цитатой

Мяу писал(а):
Попробуем file_get_contents (с потоковым контекстом через stream_context_create)


file_get_contents в чистом виде вернул хуйню:
["AjaxResponse","Redirect","/cgi-bin/login?noclear=1"]
Надо отправить вместе с запросом куку, мол я авторизован уже на сайте.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:16 pm    Заголовок сообщения: Ответить с цитатой

Заголовки запроса:

Accept text/javascript, text/html, application/xml, text/xml, */*
Accept-Encoding gzip, deflate
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Content-Length 143
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Cookie VID=2xMZRU2--cn0; mrcu=562D4F74494D0BADEF320FA193D9; p=kKcGAMv/PQAA; b=uTwJCEAK9gQApvgqwF2tYBgGg00DDKL4SigSy0CJgwIqvgoBACB0jgHxJylEqgUbQ/w8kXCWukjxGTkknNEWEs7qCAkA; Mpop=1343225487:006f765a41646b0619050219081d00051c0d0a4f6a5d5e465e05030705021e0b09001e4b584b454903050705145c555e551f4243:rasty2222@mail.ru:; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAbAAcEwwcA; c=P80PUAAAAKhjAAASAQAAfgCA; i=AQCAyg9QAQATAAgHAhwAASEAAQ==; odklmbind=1342509535519_1440565196403; searchuid=1170222711333014250; hses=1; profilecookiepromo=1
Host my.mail.ru
Referer http://my.mail.ru/?from=splash
User-Agent FSB
X-Prototype-Version 1.6.0.3
X-Requested-With XMLHttpRequest
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:16 pm    Заголовок сообщения: Ответить с цитатой

извлечем отсюда пока только куки и отправим их серваку
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:21 pm    Заголовок сообщения: Ответить с цитатой

Хуячим:
Код:
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept: text/javascript, text/html, application/xml, text/xml, */*\r\n" .
"Cookie: VID=2xMZRU2--cn0; mrcu=562D4F74494D0BADEF320FA193D9; p=kKcGAMv/PQAA; b=uTwJCEAK9gQApvgqwF2tYBgGg00DDKL4SigSy0CJgwIqvgoBACB0jgHxJylEqgUbQ/w8kXCWukjxGTkknNEWEs7qCAkA; Mpop=1343225487:006f765a41646b0619050219081d00051c0d0a4f6a5d5e465e05030705021e0b09001e4b584b454903050705145c555e551f4243:rasty2222@mail.ru:; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAbAAcEwwcA; c=P80PUAAAAKhjAAASAQAAfgCA; i=AQCAyg9QAQATAAgHAhwAASEAAQ==; odklmbind=1342509535519_1440565196403; searchuid=1170222711333014250; hses=1; profilecookiepromo=1\r\n"
  )
);

$context = stream_context_create($opts);

$response = file_get_contents($url, false, $context);
echo $response;


Получаем в браузере ответ:
["AjaxResponse","OK","captcha","162485294"]

Все работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:24 pm    Заголовок сообщения: Ответить с цитатой

Декодируем ответ сервера:
Код:
$json=json_decode($response);
echo "<pre>";
print_r($json);
echo "</pre>";


Получаем массив:
Код:
Array
(
    [0] => AjaxResponse
    [1] => OK
    [2] => captcha
    [3] => 470919385
)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:26 pm    Заголовок сообщения: Ответить с цитатой

Код:
echo "<img src=\"http://my.mail.ru/cgi-bin/my/get_image?id=".$json[3]."\"/>";


Вот, блять. На капче нолики.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:31 pm    Заголовок сообщения: Ответить с цитатой



Подменить реферер не получится - скрипт выполняется на том-же домене. Вот блять.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot
цитировать



Репутация: +89/–10    

Зарегистрирован: 23.05.2006
Сообщения: 24387

Награды: Нет

СообщениеДобавлено: Ср Июл 25, 2012 2:35 pm    Заголовок сообщения: Ответить с цитатой

Мяу писал(а):
Подменить реферер не получится


Да за нехуй делать

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии Часовой пояс: GMT
На страницу 1, 2, 3, 4, 5, 6  След.
Страница 1 из 6

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB