отправка сообщения на Icq

  • Автор темы Foshvad
  • Дата начала

Foshvad

Guest
отправка сообщения на Icq

Да, я знаю, что на этом сайте уже есть это скрипт (здесь: http://www.php.spb.ru/php/icq.html)
Но он не работает, потому и пишу в форум, что уточнить у автора, или того, кто в нем разбирается, что необходимо изменить. Сервер отвечает: HTTP/1.1 301 Moved Permanently
Понимаю, что изменения необходимы незначительные. но произвети их не получается. Помогите пожалуйста.
 

[VS]

Guest
Re: отправка сообщения на Icq

Автор оригинала: Foshvad
Да, я знаю, что на этом сайте уже есть это скрипт (здесь: http://www.php.spb.ru/php/icq.html)
Но он не работает, потому и пишу в форум, что уточнить у автора, или того, кто в нем разбирается, что необходимо изменить. Сервер отвечает: HTTP/1.1 301 Moved Permanently
Понимаю, что изменения необходимы незначительные. но произвети их не получается. Помогите пожалуйста.
А разобраться как оно работает и самому внести изменения?
 

Foshvad

Guest
Дык пробовал. В форму потому и написал, что не получилось. По-моему не совпадает action, но сейчас он на странице равен /whitepages/page_me/1,,,00.html. Менять пробовал, не работает.
 

slach

Новичок
вот тебе готовое решение. которое у меня работает.
PHP:
<?
/*****************************
Jik All rights reserved.
This is a standard copyright header for all source 
code appearing at Jik. 
This application/class/script may be redistributed,
as long as the above copyright remains intact.
Comments to [email][email protected][/email]
*******************************
check new to [url]http://jiks.chat.ru[/url] 

*/

/**
 * @title Sock Sender
 * @author Jik
 * @version 0.1 - first version. Supported only POST method
*/

/*
it's class allow send any POST http query to any server and get answer.
Use for send from script (and cron) any posts to 
any servers: icq, sms, boards, and other.

Open html source code from server, mark a 
"input" tags, values, write $data array and send it!
*/

class socksender
{
	var $User_Agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)";
	var $Accept_Encoding="gzip, deflate";
	var $method="POST";
	var $protocol="HTTP/1.0";
	var $send2port=80;

	function send($host, $send2url, $referer, $data)
	{
	$http_query="";
		while (list($name,$value)=each($data))
		{
		 $tmp_data[]=urlencode($name)."=".urlencode($value);
		}
		$enc_data=implode("&", $tmp_data);
		$len_data=strlen($enc_data);
	if ($this->method=="POST")
		{
		$http_query=
			$this->method." ".$send2url." HTTP/1.0\r\n".
			"Referer: ".$referer."\r\n".
			"Content-Type: application/x-www-form-urlencoded"."\r\n".
			"Content-Length: ".$len_data."\r\n".
			"Host: ".$host."\r\n".
			"Accept: */*\r\n".
			"Accept-Encoding: ".$this->Accept_Encoding."\r\n".
			"Connection: Keep-Alive"."\r\n".
			"User-Agent: ".$this->User_Agent."\r\n"."\r\n".
			$enc_data;
		 flush();
		   $fs = fsockopen($host, $this->send2port, &$errno, &$errstr, 30);
	           if (!$fs) { die ("unable open socket: $errstr ($errno)");}
		   fputs ($fs, $http_query);
		   while($r=fgets ($fs, 20048)) $rt.=$r;
		   fclose($fs);
		 flush();
		}
	return $rt;
	}
}

$post=new socksender();

$data['to']="#нужный UIN";
$data['from']="Имя Юзера";
$data['fromemail']="info@домен.ру";
$data['body']="TEST MESSAGE";

echo "<pre>".$post->send("web.icq.com", 
"/whitepages/page_me/1,,,00.html", 
"http://web.icq.com/wwp?Uin=#нужный UIN", 
$data)."</pre>";
?>
 

gramilon

Новичок
slach
твой скрипт не перебрасывает на страничку подтверждения на сайте icq.com :(
может в запрос вложить
 

gramilon

Новичок
помоему, нужно просто cделать подобный FORM-POST запрос

http://web.icq.com/whitepages/send_message_form?to=#нужный UIN
 

slach

Новичок
ну ты умник блин =))) скрипт опубликован почти ДВА года назад =)... наверное icq.com за это время достаточно сильно изменился ? а ?
 

gramilon

Новичок
я не много изменил скрипт
пока работает

PHP:
<?
class socksender {
  var $User_Agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)";
  var $Accept_Encoding="gzip, deflate";
  var $method="POST";
  var $protocol="HTTP/1.0";
  var $send2port=80;

  function send($host, $send2url, $referer, $data){
    $http_query="";
    while (list($name,$value)=each($data)) $tmp_data[] = urlencode($name)."=".urlencode($value);
    $enc_data=implode("&", $tmp_data);
    $len_data=strlen($enc_data);

    if ($this->method=="POST"){
      $http_query=
         $this->method." ".$send2url." HTTP/1.0\r\n".
         "Referer: ".$referer."\r\n".
         "Content-Type: application/x-www-form-urlencoded"."\r\n".
         "Content-Length: ".$len_data."\r\n".
         "Host: ".$host."\r\n".
         "Accept: */*\r\n".
         "Accept-Encoding: ".$this->Accept_Encoding."\r\n".
         "Connection: Keep-Alive"."\r\n".
         "User-Agent: ".$this->User_Agent."\r\n"."\r\n".
         $enc_data;

      flush();
      $fs = fsockopen($host, $this->send2port, &$errno, &$errstr, 30);
      if (!$fs) { die ("unable open socket: $errstr ($errno)");}
      fputs ($fs, $http_query);
      while($r=fgets ($fs, 20048)) $rt.=$r;
      fclose($fs);
      flush();
    }
    return $rt;
  }
}

$post=new socksender();

$data['charcount']="450";
$data['to']="#нужный UIN"; 
$data['nickname']="";
$data['from']="Имя Юзера"; 
$data['fromemail']="info@домен.ру"; 
$data['body']="TEST MESSAGE"; 
$data['gnm']="9B6B52D1D301D582467A24FE9350D9639EFE32D92B307ADEF7F1D503C7B6198B";
$data['word']="free";

echo "<pre>".$post->send("web.icq.com","/whitepages/confirm","http://web.icq.com/whitepages/page_me/1,,,00.html",$data)."</pre>";
?>
 

gramilon

Новичок
но работать будет не всегда
возможно нужно будет анализировать
PHP:
return $rt;
 

Serj27

Guest
да, как-то не работает это пример :(

там же у них просится ввести слово, которое видишь на экране на картинке, это нужно как то обойти ?
 

slach

Новичок
;) это уже почти никак не обойти... по крайне мере...
проще реализовать протокол ICQ через сокеты... с авторизацией и т.п.
 

maxik0

Guest
Я пока сделал так: поставил micq, запускаю его под nobody. там есть возможность управлять им через FIFO. Соответсвенно, micq постоянно висит в памяти, под него зарегистрирован UIN. И форма через FIFO обращается к нему. Единственная проблема -- не получается отсылать русские буквы.
 

maxik0

Guest
Да, ты прав, проблема была именно с юникоде.
 

slach

Новичок
ну вот когда ты решил проблему...
может ты соизволишь запостить куда нибудь кусок кода ??? плиз =)
 

maxik0

Guest
И так, ставится micq. регистрируется пользователь, от которого будут посылаться сообщения. При загрузке micq запускается следующим образом:
/usr/bin/su -m nobody -c "/usr/local/bin/micq" & -- просто иначе не дает из под веба писать в FIFO.
ну а код элементарный:

<?
function win2utf($str)
{
$utf = "";
for($i = 0; $i < strlen($str); $i++)
{
$donotrecode = false;
$c = ord(substr($str, $i, 1));
if ($c == 0xA8) $res = 0xD081;
elseif ($c == 0xB8) $res = 0xD191;
elseif ($c < 0xC0) $donotrecode = true;
elseif ($c < 0xF0) $res = $c + 0xCFD0;
else $res = $c + 0xD090;
$utf .= ($donotrecode) ? chr($c) : (chr($res >> 8) . chr($res & 0xff));
}
return $utf;
}
$message=win2utf($message);
echo $message;
$filename="/root/.micq/remote-control";
$file=fopen($filename,"w");
$Msg="/msg $uin $message\n";
/*$socket = socket_create (AF_UNIX, SOCK_STREAM, 0);
$result = socket_connect ($socket, $filename,0);
socket_write ($socket, $Msg, strlen ($Msg));
socket_close ($socket);*/


fputs($file,"/msg $uin $message\n");
fclose($file);
echo "Message sended";
?>
 

maxik0

Guest
Да, чтоб не было проблем с копирайтами, функцию перекодировки в юникод где-то тут в форуме откопал :)
 

R`oo`T

Guest
Чуваки... вообщето ICQ недавно сделала так, что при соощении, нужно заполнить текст с картинки... вообщем облом.
 

maxik0

Guest
R`oo`T: ты б прочитал мой пост... Какая картинка? В своей форме я никаких картинок не вывожу и не требую их никуда вводить :)
 

R`oo`T

Guest
Я всё прочитал. Я говорил о том, что скрипты для отправки сообщений на аську - в обломе. Так теперь когда нужно писать сообщение (у них на сайте), то ещё приходиться писать слово с картинки. Вот про что я :) Извините, если не в тему.
 
Сверху