<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>#Wolf# blog</title>
	<atom:link href="http://wolf-et.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://wolf-et.ru</link>
	<description>Standalone бложек #Wolf#'a</description>
	<lastBuildDate>Fri, 02 Dec 2011 08:37:02 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Скачиваем фото с mamba.ru (love.mail.ru). [Обновлено]</title>
		<link>http://wolf-et.ru/javascript/downloading-photo-from-mamba-ru/</link>
		<comments>http://wolf-et.ru/javascript/downloading-photo-from-mamba-ru/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 10:13:05 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[UserJS]]></category>
		<category><![CDATA[mamba.ru]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=273</guid>
		<description><![CDATA[Хочу представить вам userJS для сохранения фотографий с мамбы. Данное расширение добавляет кнопочку Download рядом с кнопкой Close. Подробности под катом Раз вы попали сюда, то наверное, вы сталкивались с проблемой сохранения изображений с сайта знакомств mamba.ru(love.mail.ru и другие партнерские проекты). (кликабельно) Знакомая картина, не правда ли? Давайте разберемся, почему так происходит. Если заглянуть в [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" style="border: 0px;" src="http://194.186.171.75/images/default2/mamba/logo.gif" border="0" alt="" width="182" height="36" /></p>
<p>Хочу представить вам userJS для сохранения фотографий с мамбы.<br />
Данное расширение добавляет кнопочку <strong>Download</strong> рядом с кнопкой <strong>Close</strong>.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-281" style="border: 0px;" title="pic" src="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-2.png" alt="" width="312" height="156" /></p>
<p style="text-align: center;">Подробности под катом</p>
<p><span id="more-273"></span><br />
Раз вы попали сюда, то наверное, вы сталкивались с проблемой сохранения изображений с сайта знакомств mamba.ru(love.mail.ru и другие партнерские проекты).<br />
<a href="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-3.png" target="_blank"><img class="aligncenter size-medium wp-image-288" style="border: 0px;" title="pic2" src="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-3-300x286.png" alt="" width="300" height="286" /></a></p>
<p style="text-align: center;">(кликабельно)</p>
<p>Знакомая картина, не правда ли? Давайте разберемся, почему так происходит. Если заглянуть в исходный текст страницы, то все становится понятно. Фотографии расположены горизонтальной лентой. Лента состоит из <span style="color: #ff0000;">DIV</span>&#8216;овых блоков, внуктри которых атрибут <span style="color: #ff0000;">INS</span> со свойством background-image. Он то нам и нужен.<br />
<a href="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-4.png" target="_blank"><img class="aligncenter size-medium wp-image-301" title="pic3" src="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-4-300x92.png" alt="" width="300" height="92" /></a></p>
<p style="text-align: center;">(кликабельно)</p>
<p>Приступаем к написанию кода.</p>
<pre class="brush: jscript; title: ; notranslate">
// ==UserScript==
// @name Mamba download photos
// @namespace wolf-et.ru
// @version 0.2
// @source wolf-et.ru
// @author #Wolf#
// @description Adds a download button for photos
// @include *mamba.ru*
// @include *love.mail.ru*
// ==/UserScript==
////jQ1.5////
Код jquery-1.5.min.js
////////////
var g;

function parse_id(){
var id=/photo_id\=(\d+)/gi.exec(window.location.href);return id[1];}
function parse_div(d){var my1=/(\d+)_huge/gi.exec(d);return my1[1];}
function clurl(im){var my2=/url\("?(.+?)"?\)/gi.exec(im);if(my2!=null)return my2[1];}
if(/album_photos/gi.test(window.location)){
$('.fv-empty').before('&lt;a id="dwn" style="right: 22px;top: 0;cursor: pointer;position: absolute;z-index: 101;">&lt;img  src="http://storage1.static.itmages.ru/i/11/1202/h_1322809719_5031124_6a6d02084d.jpeg">&lt;/a>');
$('#dwn').click(function(){
$('.line').children().children().each(function(e) {
//if($(this).attr('style')!=undefined)alert($(this).attr('style'));
if(/_huge/gi.test($(this).attr('style'))){var tmp=$(this).attr('style');if(parse_id()==parse_div(tmp) &#038;& tmp!=null)g=clurl(tmp);}
});
if(g!=null)window.open(g);
});
}
</pre>
<p style="text-align: center;">В итоге выглядит это примерно так:<br />
<img class="aligncenter size-full wp-image-281" style="border: 0px;" title="pic" src="http://wolf-et.ru/wp-content/uploads/2011/07/Untitled-2.png" alt="" width="312" height="156" /></p>
<p>По щелчку на кнопку, откроется новое окно, где вы можете привычным для вас способом(правой кнопкой мыши) сохранить фото.</p>
<p>Несколько слов касаемо кроссбраузерности.<br />
Код библиотеки jQuery пришлось вставить прямо в файл, т.к chrome не может заинклудить его с внешних ресурсов.<br />
<strong>Проверено на Mozilla firefox/Google chrome/Opera.</strong></p>
<p>Для установки пользователям Firefox(при условии, что установлено расширение Greasemonkey) и Chrome достаточно перейти по ссылке, представленной ниже.<br />
<a href='http://wolf-et.ru/wp-content/uploads/2011/07/mamba.user.js'><strong>mamba.user.js</strong></a><br />
Пользователям Opera необходимо скачать данный файл и положить в папку с пользовательскими скриптами, которая прописана в настройках браузера.</p>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/javascript/downloading-photo-from-mamba-ru/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Curl vs sockets vs file_get_contents vs multiCurl</title>
		<link>http://wolf-et.ru/php/curl-vs-sockets-vs-file_get_contents-vs-multicurl/</link>
		<comments>http://wolf-et.ru/php/curl-vs-sockets-vs-file_get_contents-vs-multicurl/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 07:14:54 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[file_get_contents]]></category>
		<category><![CDATA[multicurl]]></category>
		<category><![CDATA[sockets]]></category>
		<category><![CDATA[versus]]></category>
		<category><![CDATA[vs]]></category>
		<category><![CDATA[сравнение]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=247</guid>
		<description><![CDATA[Давайте же проведем небольшое сравнение в скорости. 1) Curl 2) Sockets 3) file_get_contents 4) MultiCurl В качестве теста получим страницу &#171;http://google.de&#187; сто раз. Результаты: Как видим, лидирует мультикурл, беспощадно оставляя своих соперником далеко позади. Применять multicurl стоит лишь тогда, когда имеется объемное количество url&#8216;ов. Иначе, если список &#171;страниц&#187;, которые необходимо &#171;посетить&#187; небольшой(2,3,5,10), самый рациональный вариант [...]]]></description>
			<content:encoded><![CDATA[<p>Давайте же проведем небольшое сравнение в скорости.</p>
<p>1) <strong>Curl</strong></p>
<pre class="brush: php; title: ; notranslate">
&lt; ?
function curl($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
}
</pre>
<p>2) <strong>Sockets</strong></p>
<pre class="brush: php; title: ; notranslate">
function sockets($host) {
$fp = fsockopen("www.".$host, 80, $errno, $errstr, 30);
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: www.".$host."\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  $f='';
  while (!feof($fp)) {
    $f .= fgets($fp, 1024);
  }
return $f;
}</pre>
<p>3) <strong>file_get_contents</strong></p>
<pre class="brush: php; title: ; notranslate">
function fgc($url){
return file_get_contents($url);
}
</pre>
<p>4) <strong>MultiCurl</strong></p>
<pre class="brush: php; title: ; notranslate">
function multiRequest($data,$nobody=false,$options = array(), $oneoptions = array())
{
	$curls = array();
	$result = array();
	$mh = curl_multi_init();
	foreach ($data as $id => $d)
	{
		$curls[$id] = curl_init();
		$url = (is_array($d) &#038;& !empty($d['url'])) ? $d['url'] : $d;
		curl_setopt($curls[$id], CURLOPT_URL,            $url);
		curl_setopt($curls[$id], CURLOPT_HEADER,         0);
		curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curls[$id], CURLOPT_FOLLOWLOCATION,1);
		curl_setopt($curls[$id], CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
		//curl_setopt($curls[$id], CURLOPT_COOKIEJAR,'cookies.txt');
		//curl_setopt($curls[$id], CURLOPT_COOKIEFILE,'cookies.txt');
		//curl_setopt($curls[$id], CURLOPT_NOBODY, $nobody);

		if (!empty($options))
		{
			curl_setopt_array($curls[$id], $options);
		}
		if (!empty($oneoptions[$id]))
		{
			curl_setopt_array($curls[$id], $oneoptions[$id]);
		}
		if (is_array($d))
		{
			if (!empty($d['post']))
			{

				curl_setopt($curls[$id], CURLOPT_POST,       1);
				curl_setopt($curls[$id], CURLOPT_POSTFIELDS, $d['post']);
			}
		}
		curl_multi_add_handle($mh, $curls[$id]);
	}
	$running = null;
	do
	{
		curl_multi_exec($mh, $running);
	}
	while($running > 0);
	foreach($curls as $id => $content)
	{
		$result[$id] = curl_multi_getcontent($content);
		//echo curl_multi_getcontent($content);
		curl_multi_remove_handle($mh, $content);
	}
	curl_multi_close($mh);
	return $result;
}
</pre>
<p>В качестве теста получим страницу &#171;http://google.de&#187; сто раз.</p>
<pre class="brush: php; title: ; notranslate">
$url = 'google.de';
$start = microtime(1);
for($i=0;$i&lt;100;$i++)
curl($url);
$end = microtime(1);
echo "Curl:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i&lt;100;$i++)
fgc("http://$url/");
$end = microtime(1);
echo "file_get_contents:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i&lt;100;$i++)
sockets($url);
$end = microtime(1);
echo "Sockets:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i&lt;100;$i++)
$arr[]=$url;
multiRequest($arr);
$end = microtime(1);
echo "MultiCurl:".($end-$start)."\n";
?>
</pre>
<p><strong>Результаты:</strong></p>
<pre class="brush: bash; title: ; notranslate">
Curl: 5.39667105675
file_get_contents: 7.99799394608
Sockets: 2.99629592896
MultiCurl: 0.736907958984
</pre>
<p>Как видим, лидирует <strong>мультикурл</strong>, беспощадно оставляя своих соперником далеко позади. Применять <strong>multicurl</strong> стоит лишь тогда, когда имеется объемное количество <strong>url</strong>&#8216;ов.<br />
Иначе, если список &#171;страниц&#187;, которые необходимо &#171;посетить&#187; небольшой(2,3,5,10), самый рациональный вариант &#8211; использовать сокеты, но..кому как, мне например, несмотря на то, что т <strong>socket</strong>&#8216;ы выигрывают у <strong>curl</strong>&#8216;а, удобнее использовать его, т.к нет проблем с заголовками(headers) и прочим.</p>
<p>Что выбрать? Решать только вам.</p>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/curl-vs-sockets-vs-file_get_contents-vs-multicurl/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Журнал отметок(оценок) [php+ajax]</title>
		<link>http://wolf-et.ru/php/%d0%b6%d1%83%d1%80%d0%bd%d0%b0%d0%bb-%d0%be%d1%82%d0%bc%d0%b5%d1%82%d0%be%d0%ba-%d0%be%d1%86%d0%b5%d0%bd%d0%be%d0%ba-phpajax/</link>
		<comments>http://wolf-et.ru/php/%d0%b6%d1%83%d1%80%d0%bd%d0%b0%d0%bb-%d0%be%d1%82%d0%bc%d0%b5%d1%82%d0%be%d0%ba-%d0%be%d1%86%d0%b5%d0%bd%d0%be%d0%ba-phpajax/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 14:37:35 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[journal]]></category>
		<category><![CDATA[php отметки]]></category>
		<category><![CDATA[журнал]]></category>
		<category><![CDATA[оценки]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=170</guid>
		<description><![CDATA[Написал довольно простую реализацию журнала отметок с использованием php и ajax. Ниже представлена пара скриншотов, которые наглядно демонстрируют функционал. UPDATE: Добавлены всплывающие уведомления. Дальнейшее описание и исходники под катом. index.php bd.php ajax.php journal.js style.css grade.sql grade.sql В архиве]]></description>
			<content:encoded><![CDATA[<p>Написал довольно простую реализацию журнала отметок с использованием php и ajax.<br />
Ниже представлена пара скриншотов, которые наглядно демонстрируют функционал.<br />
<a href="http://wolf-et.ru/wp-content/uploads/2010/08/wolf-et-journal-e1282741379308.jpg"><img src="http://wolf-et.ru/wp-content/uploads/2010/08/wolf-et-journal-e1282741379308-300x209.jpg" alt="" title="wolf-et-journal" width="300" height="209" class="aligncenter size-medium wp-image-171" /></a><br />
<strong>UPDATE:</strong> Добавлены всплывающие уведомления.<br />
Дальнейшее описание и исходники под катом.<br />
<span id="more-170"></span><br />
<strong>index.php</strong></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
#Govnocode by #Wolf-et.ru#
require_once("bd.php");
header('Content-Type: text/html; charset=utf-8');
echo &lt;&lt;&lt;HTML
&lt;link href="style.css" rel="stylesheet" type="text/css" />
&lt;script language="javascript" src="journal.js">&lt;/script>
&lt;div class="edit" id="edit">
&lt;input type="hidden" class="button" id="delete" value="Delete" onclick="deletep()" />
&lt;input type="text" class="save" name="text" size="15" id="text"/>
&lt;input type="button" class="button" value="Save" id="save" onclick="save()" />
&lt;/div>
&lt;div class="notification success" id="success" >
&lt;a href="javascript:void(0);" onclick="hide_notify('success');" class="close">close&lt;/a>
&lt;div id="success_text">success&lt;/div>
&lt;/div>
&lt;div id="error" class="notification error">
&lt;a href="javascript:void(0);" onclick="hide_notify('error');" class="close">close&lt;/a>
&lt;div id="error_text">error&lt;/div>
&lt;/div>
HTML;
function getevabymonth($date,$p_id){
$query=mysql_query("SELECT id,rate FROM grade WHERE date='".$date."' AND p_id='".$p_id."' LIMIT 1");
if(mysql_num_rows($query)>0)
$result=mysql_fetch_assoc($query);
else return '0';
return $result;
}
function parsedate($date){
if(!$date)$date=date('d-m-Y');
preg_match('#([\d]{1,2})-([\d]{1,2})-([\d]{2,4})#',$date,$result);
$a=array();
$a['day']=$result[1];
$a['month']=$result[2];
$a['year']=$result[3];
return $a;
}
function monthname($month){
return date('F',mktime(0,0,0,$month));
}
function getmonth($month){
return (int)date('t',mktime(0,0,0,$month));
}
function journal($month,$year){
if(strlen($year)!=4)die('Год следует указывать в полном формате. Например "2010"');
$monthname=monthname($month);
$cm=getmonth($month);
$query=mysql_query("SELECT id,name,tel FROM people ORDER BY name");
echo '&lt;table border="1" width="auto">';
echo "&lt;tr align='center'>&lt;td>&lt;/td>&lt;td align='center'>".$monthname."&lt;/td>&lt;/tr>&lt;tr>\n";
echo '&lt;/tr>&lt;tr>&lt;td>№&lt;/td>&lt;td align="center" id="newp" onclick="showMenu(this,event)" class="normal"  onmouseover="setClass(this,\'hover\')" onmouseout="setClass(this,\'normal\')">Имя [ + ]&lt;/td>';for($i=1;$i&lt; =$cm;$i++){$ii=($i&lt;10)?'0'.$i:$i; echo '&lt;td>'.$ii."\n";}echo "&lt;/tr>\n";
$x=1;$y=1;
while($r=mysql_fetch_assoc($query)){
echo "&lt;tr>&lt;td>".$y."&lt;/td>&lt;td id='people_".$r['id']."' onclick=\"showMenu(this,event);\" class=\"normal\"  onmouseover=\"setClass(this,'hover')\" onmouseout=\"setClass(this,'normal')\">".$r['name']."&lt;/td>\n";
for($i=1;$i&lt; =$cm;$i++){
$ii=($i&lt;10)?'0'.$i:$i;
$re=getevabymonth($ii.'-'.$month.'-'.$year,$r['id']);
if($re['rate']!=0) echo '&lt;td id="cell_'.$re['id'].'" class="normal"  onmouseover="setClass(this,\'hover\')" onmouseout="setClass(this,\'normal\')" onclick="showMenu(this,event);makecook(\''.$re['id'].'\');">'.$re['rate']."\n";
else
echo '&lt;td id="cell__'.$x.'" class="normal"  onmouseover="setClass(this,\'hover\')" onmouseout="setClass(this,\'normal\')" onclick="showMenu(this,event);makecook2(\''.$ii.'-'.$month.'-'.$year.'\',\''.$r['id'].'\');">&nbsp;&lt;/td>'."\n";
$x++;
}echo "&lt;/tr>\n";$y++;}
echo '&lt;/table>';
}
function make_select(){
global $month,$year;
$y_val=(isset($year))?$year:date('Y');
echo '&lt;form name="myform" method="GET">
&lt;input type="text" size="4" class="button" name="year" value="'.$y_val.'"/>
&lt;select name="month" onchange="document.forms[0].submit();">';
for($i=1;$i&lt; =12;$i++){
if(isset($month))$where=$month; else $where=date('m');
$ii=($i&lt;10)?'0'.$i:$i;
$selected=($ii==$where)?'selected':false;
echo '&lt;option class="save" '.$selected.' value="'.$ii.'" >'.monthname($ii).''."\n";
}
echo '&lt;/select>&lt;/form>';
}
$month=@$_REQUEST['month'];
$year=@$_REQUEST['year'];
make_select();
if(isset($month) &#038;& isset($year)){
journal($month,$year);
}
else journal(date('m'),date('Y'));
</pre>
<p><strong>bd.php</strong></p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
$db = mysql_connect("localhost","root","root");
mysql_select_db("journal",$db);
mysql_query("SET NAMES 'utf8'");
?>
</pre>
<p><strong>ajax.php</strong></p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
header('Content-Type: text/html; charset=utf-8');
require_once("bd.php");
//print_r($_REQUEST);
$action=strtolower(@$_REQUEST['action']);
if(!preg_match('#^insert|edit|edit_p|newp|deletep$#',$action))die("Unknown action.");
$date=@$_REQUEST['date'];
$newname=@$_REQUEST['newname'];
$p_id=intval(@$_REQUEST['p_id']);
$id=intval(@$_REQUEST['id']);
$rate=trim(str_replace(" ","",@$_REQUEST['rate']));
if($action=='insert'){
if(!preg_match('#[\d]{1,2}-[\d]{1,2}-[\d]{2,4}#',$date))die('Incorrect date format.');
if(!preg_match('#^[1-5]$#',$rate)) die('Нет оценки или же она выходит за пределы [1-5].');
$query=mysql_query("INSERT INTO grade(rate,date,p_id) VALUES ('".$rate."','".$date."','".$p_id."')")or die(mysql_error());
if($query) echo "OK.&lt;br />Grade was added for user \"".getnbyid($p_id)."\".";
}
elseif($action=='edit'){
if(!preg_match('#^[1-5|]$#',$rate) &#038;& $rate!='') die('Нет оценки или же она выходит за пределы [1-5].');
if($rate=='')
$query=mysql_query("DELETE FROM grade WHERE id='".$id."'")or die(mysql_error());
else
$query=mysql_query("UPDATE grade SET rate = '".$rate."'  WHERE id='".mysql_real_escape_string($id)."'")or die(mysql_error());
if($query) echo "OK.&lt;br />Grade was updated successfully for user \"".getnbyid(getp_id($id))."\".";
}elseif($action=='edit_p'){
$query=mysql_query("UPDATE people SET name = '".mysql_real_escape_string($newname)."'  WHERE id='".$id."'")or die(mysql_error());
if($query) echo "OK.&lt;br />User \"".$newname."\" was edited successfully.";
}elseif($action=='newp'){
$query=mysql_query("INSERT INTO people(name) VALUES ('".mysql_real_escape_string($newname)."')")or die(mysql_error());
if($query)  echo "OK.&lt;br />User \"".$newname."\" was added successfully.";
}elseif($action=='deletep'){
	$user=getnbyid($id);
$query=mysql_query("DELETE FROM people WHERE id='".$id."'")or die(mysql_error());
if($query) echo "OK.&lt;br />User \"".$user."\" was deleted successfully.";
}
function getnbyid($id){
$query=mysql_query("SELECT name FROM people WHERE id='".intval($id)."' LIMIT 1");
$result=mysql_fetch_assoc($query);
return $result['name'];
}
function getp_id($id){
$query=mysql_query("SELECT p_id FROM `grade` WHERE id='".intval($id)."'");
$result=mysql_fetch_assoc($query);
return $result['p_id'];
}
?>
</pre>
<p><strong>journal.js</strong></p>
<pre class="brush: jscript; title: ; notranslate">
//#Govnocode by #Wolf-et.ru#
var selectedCell=null;
	function setClass(id,cName){
		if(id.className!='selected'){
			id.className=cName;
		}
	}
	function save(){
		if(selectedCell!=null){
		//alert(selectedCell.id);
			if(selectedCell.id!='newp'){
			if(document.getElementById('text').value!="")
			selectedCell.innerHTML=document.getElementById('text').value;
			else
			selectedCell.innerHTML="&nbsp;";
			}
			//alert(document.getElementById('text').value);
			document.getElementById('edit').style.display="none";
			selectedCell.className='normal';
			date=getCookie('date');
			p_id=getCookie('p_id');
			iid=getCookie('id');
			form_data=document.getElementById('text').value;
			if(/cell/gi.test(selectedCell.id)){
			if(/__/gi.test(selectedCell.id))
			send('ajax.php?action=insert&#038;date='+date+'&#038;p_id='+p_id+'&#038;rate='+form_data);
			else
			send('ajax.php?action=edit&#038;id='+iid+'&#038;rate='+form_data);
			}
			if(/people_/gi.test(selectedCell.id)){
			pi_id=selectedCell.id.match(new RegExp ("[\\d]+","i"));
			send('ajax.php?action=edit_p&#038;id='+pi_id+'&#038;newname='+form_data);
			}
			if(selectedCell.id=='newp'){
			send('ajax.php?action=newp&#038;newname='+form_data);
			}
			Delete_Cookie('p_id');
			Delete_Cookie('date');
			Delete_Cookie('id');
			//window.location.reload()
		}
	}
	function deletep(){
	if(selectedCell!=null){
			if(confirm('Are you sure?')){
			//alert(document.getElementById('text').value);
			document.getElementById('edit').style.display="none";
			selectedCell.className='normal';
			if(/people_/gi.test(selectedCell.id)){
			pi_id=selectedCell.id.match(new RegExp ("[\\d]+","i"));

			send('ajax.php?action=deletep&#038;id='+pi_id);
			}
			}

		}
	}
	function save_p(){
		if(selectedCell!=null){
			if(document.getElementById('textpeople').value!="")
			selectedCell.innerHTML=document.getElementById('textpeople').value;
			else
			selectedCell.innerHTML="&nbsp;";
			alert(document.getElementById('textpeople').value);
			document.getElementById('editpeople').style.display="none";
			selectedCell.className='normal';

		}
	}
function people(){
my_menu=document.getElementById('people');
if(my_menu.style.display=="none"  || my_menu.style.display==""){
	my_menu.style.display="block";

	} else {
	my_menu.style.display="none";
	selectedCell.className='normal';
}}
function showMenu(id,e){
	if(selectedCell!=null)selectedCell.className='normal';
	selectedCell=id;
	selectedCell.className='selected';
	if (!e) var e = window.event;
	if (/people_/gi.test(selectedCell.id) || /newp/gi.test(selectedCell.id))document.getElementById('text').size=15;else document.getElementById('text').size=1;
	if (/people_/gi.test(selectedCell.id))
	document.getElementById('delete').type="button";
	else document.getElementById('delete').type="hidden";
	var my_menu =  document.getElementById('edit');
	my_menu.style.left=e.clientX+10+ "px";
	my_menu.style.top=e.clientY+5+ "px";
	if(my_menu.style.display=="none"  || my_menu.style.display==""){
	my_menu.style.display="block";

	if(/newp/gi.test(id.id)){
	document.getElementById('text').value="";
	document.getElementById('save').value="Add";
	}else
	document.getElementById('text').value=nbspreplace(id.innerHTML);
	document.getElementById('text').focus();
	} else {
	my_menu.style.display="none";
	selectedCell.className='normal';
	Delete_Cookie('p_id');
	Delete_Cookie('date');
	Delete_Cookie('id');
	}
}
function show(id,e){
	if(selectedCell!=null)selectedCell.className='normal';
	selectedCell=id;
	selectedCell.className='selected';
	if (!e) var e = window.event;
	var my_menu =  document.getElementById('editpeople');
	my_menu.style.left=e.clientX+10+ "px";
	my_menu.style.top=e.clientY+5+ "px";
	if(my_menu.style.display=="none"  || my_menu.style.display==""){
	my_menu.style.display="block";
	document.getElementById('textpeople').value=nbspreplace(id.innerHTML);
	document.getElementById('textpeople').focus();
	} else {
	my_menu.style.display="none";
	selectedCell.className='normal';
	}
}
function getXmlHttp(){
	var xmlhttp
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e1) {
      			xmlhttp = false;
		}
	}

	if (!xmlhttp &#038;& typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}

	return xmlhttp;
}

function send(url){
	var req = getXmlHttp();
	//alert(url);
	function stateChange() {
  //Look for the complete state of 4
  if (req.readyState == 4) {
    //Make sure status is a success
   // alert(req.status);
    if (req.status == 200 || req.status == 0) {
      //display content
      show_notify('success',req.responseText);
      setTimeout('reloadpg()',2000);
      //alert(req.responseText);
    }
    else {
      show_notify('error',req.statusText);
    }
  }
}
        req.onreadystatechange = stateChange;
    //Give it the keys specifying GET or POST
        req.open("GET", url, true);
    //Since we are using GET no info to send
        req.send("");

}
function reloadpg(){window.location.reload();}
function hide_notify(id){
div=document.getElementById(id);
div.style.display="none";
}
function show_notify(id,text){
div=document.getElementById(id);
div.style.display="block";
document.getElementById(id+'_text').innerHTML=text;
}
function setCookie(name, value) {
	if (!name || !value) return false;
	var str = name + '=' + encodeURIComponent(value);
	var expiresDate = new Date();
        expiresDate.setTime(expiresDate.getTime() + 60*60*24*365*10000);//10years >]:D
        var expires = expiresDate.toGMTString();
        //alert(expires);
	if (expires) str += '; expires=' + expires;
	//if (path)    str += '; path=' + path;
	//if (domain)  str += '; domain=' + domain;
	//if (secure)  str += '; secure';

	document.cookie = str;
	return true;
}

function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function Delete_Cookie( name, path, domain ) {
if ( getCookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function makecook(id){
setCookie('id',id);
}

function makecook2(date,p_id){
setCookie('date',date);
setCookie('p_id',p_id);
}

function nbspreplace(str)
{
return str.replace(/&nbsp;/gi,'');
}
</pre>
<p><strong>style.css</strong></p>
<pre class="brush: css; title: ; notranslate">
.hover{
background-color:#c4c4c4;
cursor:pointer;
}
.normal{
background-color:#f4f4f4;
}
.selected{
background-color:#FCF;
}

.edit{
display:none;
position:absolute;
border:dashed 2px /*#aEaEaE*/#0464E9;  /*border-right:solid 1px #999999; border-bottom:solid 1px #999999;*/
padding:4px;
background:#FFFFFF;
}
.item_line {
border-top:2px solid #0464E9;
margin-top:5px;
margin-bottom:5px;
}
.people{
display:none;
position:absolute;
border:dashed 2px #0464E9;
padding:4px;
background:#FFFFFF;
}
.button {
border:solid 1px #848388;
}
.save {
border:solid 1px #848388;
}

/* demo CSS */
.notification {
position:absolute;
margin:10px 10px 10px 10px;
padding: 0;
border: 1px solid;
background-position: 10px 11px !important;
background-repeat: no-repeat !important;
font-size: 13px;
width: 350px;
right: 0;
font-style:normal;
padding: 10px 10px 10px 36px;
line-height: 1.5em;
}
.notification.success {
display:none;
background: #d5ffce url(tick_circle.png);
border-color: #9adf8f;
color: #556652;}
.notification.error {
display:none;
background: #ffcece url(cross_circle.png);
border-color: #df8f8f;
color: #665252;}

.notification .close {
position:absolute;
right:5px;
top:5px;
width:7px;
height:7px;
display:block;
text-indent:-30000px;
background: url(cross_grey_small.png) no-repeat 0 0;
}
</pre>
<p><strong>grade.sql</strong></p>
<pre class="brush: sql; title: ; notranslate">
--
-- Структура таблицы `grade`
--

CREATE TABLE IF NOT EXISTS `grade` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rate` varchar(11) NOT NULL,
  `date` varchar(11) NOT NULL,
  `p_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=54 ;

--
-- Дамп данных таблицы `grade`
--

INSERT INTO `grade` (`id`, `rate`, `date`, `p_id`) VALUES
(4, '5', '18-08-2010', 2),
(19, '4', '19-08-2010', 3),
(20, '1', '21-08-2010', 3),
(21, '4', '16-08-2010', 2),
(22, '2', '28-08-2010', 3),
(23, '5', '29-08-2010', 3),
(24, '5', '20-08-2010', 4),
(25, '1', '01-08-2010', 1),
(47, '2', '14-08-2010', 5),
(29, '1', '13-08-2010', 3),
(31, '5', '07-01-2010', 1),
(32, '4', '03-08-2010', 3),
(33, '1', '06-08-2010', 2),
(34, '1', '05-08-2010', 3),
(35, '5', '09-08-2010', 3),
(37, '2', '15-08-2010', 3),
(39, '5', '31-08-2010', 3),
(49, '2', '31-08-2010', 1),
(48, '1', '31-08-2010', 5),
(42, '2', '26-08-2010', 3),
(50, '3', '31-08-2010', 2),
(46, '3', '24-08-2010', 3),
(52, '2', '31-08-2010', 4),
(53, '2', '21-08-2010', 4);
</pre>
<p><strong>grade.sql</strong></p>
<pre class="brush: sql; title: ; notranslate">
--
-- Структура таблицы `people`
--

CREATE TABLE IF NOT EXISTS `people` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `tel` varchar(255) NOT NULL,
  `something` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Дамп данных таблицы `people`
--

INSERT INTO `people` (`id`, `name`, `tel`, `something`) VALUES
(2, 'Петров', '222-222', 'something'),
(3, 'Сидоров', '333-333', 'something'),
(4, 'Сидоренко', '444-444', 'something'),
(6, 'Краснов', '', '');
</pre>
<p><a href='http://wolf-et.ru/wp-content/uploads/2010/08/journal.zip'>В архиве</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/%d0%b6%d1%83%d1%80%d0%bd%d0%b0%d0%bb-%d0%be%d1%82%d0%bc%d0%b5%d1%82%d0%be%d0%ba-%d0%be%d1%86%d0%b5%d0%bd%d0%be%d0%ba-phpajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>preg_replace или делаем ссылки кликабельными</title>
		<link>http://wolf-et.ru/php/preg_replace-or-making-hyperlinks/</link>
		<comments>http://wolf-et.ru/php/preg_replace-or-making-hyperlinks/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 06:26:53 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[a href]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[preg_match]]></category>
		<category><![CDATA[preg_replace]]></category>
		<category><![CDATA[замена ссылок]]></category>
		<category><![CDATA[кликабельные ссылки]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=149</guid>
		<description><![CDATA[Несколько дней назад мой товарищ попросил меня помочь с одним вопросом. Задача была следующей: заменить все ссылки вида на кликабельные ,т.е Чуть ниже представлена простейшая реализация: Если же просто надо спарсить ссылки, то:]]></description>
			<content:encoded><![CDATA[<p>Несколько дней назад мой товарищ попросил меня помочь с одним вопросом.<br />
Задача была следующей: заменить все ссылки вида </p>
<pre class="brush: xml; auto-links: false; light: true; title: ; notranslate">http://google.com</pre>
<p>на кликабельные ,т.е </p>
<pre class="brush: xml; auto-links: false; light: true; title: ; notranslate">&lt;a href="http://google.com">http://google.com&lt;/a></pre>
<p>Чуть ниже представлена простейшая реализация:</p>
<pre class="brush: php; light: true; title: ; notranslate">$text=preg_replace('#((?:http|https):\/\/[^\s]+)#i','&lt;a href="$1" />$1', $text);</pre>
<p>Если же просто надо спарсить ссылки, то:</p>
<pre class="brush: php; light: true; title: ; notranslate">preg_match_all('#((?:http|https):\/\/[^\s]+)#i',$text,$matches);
print_r($matches);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/preg_replace-or-making-hyperlinks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iptables для новичка</title>
		<link>http://wolf-et.ru/linux/iptables-for-dummies/</link>
		<comments>http://wolf-et.ru/linux/iptables-for-dummies/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 03:42:52 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ACCEPT]]></category>
		<category><![CDATA[ban]]></category>
		<category><![CDATA[DROP]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[unban]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=96</guid>
		<description><![CDATA[Начнем с того &#8211; что такое iptables? iptables &#8211; утилита(служба) для контроля сетевого трафика или попросту некий фаерволл с огромными возможностями. Важно: запускать iptables необходимо с правами root&#8217;a. Синтаксис iptables следующий: Ключи для работы с цепочками: -A &#8211; добавить новое правило. -D &#8211; удалить правило. -F &#8211; удалить все правила. -R &#8211; замена правила. -L [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем с того &#8211; что такое iptables?<br />
<strong>iptables</strong> &#8211; утилита(служба) для контроля сетевого трафика или попросту некий фаерволл с огромными возможностями.<br />
<span style="color: #99cc00;"><em>Важно: запускать iptables необходимо с правами root&#8217;a.</em></span></p>
<p>Синтаксис <strong>iptables</strong> следующий:</p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ -j ДЕЙСТВИЕ</pre>
<p><strong>Ключи для работы с цепочками:</strong><br />
<strong>-A</strong> &#8211; добавить новое правило.<br />
<strong>-D</strong> &#8211; удалить правило.<br />
<strong>-F</strong> &#8211; удалить все правила.<br />
<strong>-R</strong> &#8211; замена правила.<br />
<strong>-L</strong> &#8211; вывод списка всех правил.</p>
<p>В таблице <strong><em>filter</em></strong>(по умолчанию) существую следующие <strong>цепочки:</strong><br />
<strong>INPUT</strong> &#8211; входящий трафик.<br />
<strong>OUTPUT</strong> &#8211; исходящий трафик.<br />
<strong>FORWARD</strong> &#8211; пересылаемый(транзитный) трафик.</p>
<p><strong>Параметры:</strong><br />
<strong>-p</strong> &#8211; протокол, можно использовать all,icmp,tcp,udp.<br />
<strong>-s</strong> &#8211; ip адрес/хост источника.<br />
<strong>-d</strong> &#8211; ip адрес/хост назначения.<br />
<strong>-i</strong> &#8211; интерфейс на который пришел пакет.<br />
<strong>-o</strong> &#8211; интерфейс с которого уйдет пакет .<br />
<span style="color: #99cc00;">(просмотреть все интерфейсы можно с помощью команды.<strong>ifconfig</strong>, обычно это  <strong>eth0</strong>)</span><br />
<strong>&#8211;sport</strong> &#8211; порт источника.<br />
<strong>&#8211;dport</strong> &#8211; порт назначения.</p>
<p><strong>Действия:</strong><br />
<strong>ACCEPT</strong> &#8211; разрешить пакеты.<br />
<strong>REJECT</strong> &#8211; блокировать пакеты с сообщением об отказе.<br />
<strong>DROP</strong> &#8211; блокировать пакеты(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне).</p>
<p><strong>Несколько примеров:</strong><br />
<strong>1)</strong> Блокируем все входящие пакеты с ip адреса <span style="color: #ff6600;">111.111.111.111</span></p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -A INPUT -s 111.111.111.111 -j DROP</pre>
<p>А с помощью знака &#171;<strong>!</strong>&#171;(отрицание) можно сделать блокировку всех адресов(хостов), кроме заданного.<br />
Например, с помощью нижеприведенной команды, пакеты будут блокироваться со всех адресов, кроме <span style="color: #ff6600;">111.111.111.111</span></p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -A INPUT ! -s 111.111.111.111 -j DROP</pre>
<p><strong>2)</strong> Снимаем бан с IP <span style="color: #ff6600;">111.111.111.111</span></p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -D INPUT -s 111.111.111.111 -j DROP</pre>
<p><strong>3)</strong> Просмотр списка с правилами</p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -L INPUT --line-numbers</pre>
<p>Таким образом мы сможем увидить все пронумерованные правила, которые также можно удалить с помощью ключа <strong>-D</strong>.<br />
Нижеприведенная команда удаляет правила под номером 5.</p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -D INPUT 5</pre>
<p><strong>4)</strong> Поностью очищаем список со всеми правилами</p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -F</pre>
<p><strong>5)</strong> Блокируем входящие пакеты для диапазона ip адресов c <span style="color: #ff6600;">192.168.0.8</span> по <span style="color: #ff6600;">192.168.0.25</span></p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -I INPUT -m iprange --src-range 192.168.0.8-192.168.0.25 -j DROP</pre>
<p><strong>6)</strong> Блокируем весь входящий трафик на 80 порт(http).</p>
<pre class="brush: bash; light: true; title: ; notranslate">iptables -A INPUT -p tcp --sport 80 -j DROP</pre>
<p><strong>7)</strong> Блокируем домен <span style="color: #ff6600;">vk.com</span>(вконтакте).</p>
<pre class="brush: bash; light: true; title: ; notranslate">
iptables -A INPUT -s vk.com -j DROP # блокируем входящие пакеты от домена vk.com
iptables -A OUTPUT -d vk.com -j DROP # блокируем исходящие пакеты к домену vk.com
</pre>
<p>Другие домены вконтакта: <span style="color: #99cc00;">vk.com, vkontakte.ru, incontact.ru , durov.ru</span></p>
<hr />
Также можно прописать алиасы в файл <strong>.bashrc</strong>(или в .bash_aliases) для удобства использования первого и второго примера:</p>
<pre class="brush: bash; light: true; title: ; notranslate">alias ban='iptables -I INPUT -j DROP -s'
alias unban='iptables -D INPUT -j DROP -s'
</pre>
<p>После чего можно гораздо быстрее банить ip адрес командой</p>
<pre class="brush: bash; light: true; title: ; notranslate">ban 111.111.111.111</pre>
<p> и снимать бан командой</p>
<pre class="brush: bash; light: true; title: ; notranslate">unban 111.111.111.111</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/linux/iptables-for-dummies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anticaptcha balance checker</title>
		<link>http://wolf-et.ru/bash/anticaptcha-balance-checker/</link>
		<comments>http://wolf-et.ru/bash/anticaptcha-balance-checker/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 11:04:38 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[anticaptcha]]></category>
		<category><![CDATA[balance]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=83</guid>
		<description><![CDATA[Набросал простенький скриптик на bash для чека баланса антикапчи с использованием curl/wget. или однострочный вариант:]]></description>
			<content:encoded><![CDATA[<p>Набросал простенький скриптик на bash для чека баланса антикапчи с использованием curl/wget.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
login="your_login_here"
pword="your_password_here"
post_string="login=${login}&#038;password=${pword}"
url="http://antigate.com/panel.php"

which curl > /dev/null
if [ $? -eq 0 ]; then
        #echo "Using curl..."
        GET_CMD="curl -sd "
else
which wget > /dev/null
   if [ $? -eq 0 ]; then
                #echo "Using wget..."
                GET_CMD="wget -q -O - --post-data "
        else
                echo "Could not find wget or curl"
                exit 2
        fi
fi
respone=`${GET_CMD} ${post_string} ${url}|  sed -n -e 's/.*&lt;span class=\"hlinks\">\(.*\)&lt;\/span>.*/\1/p'`
echo "Ваш баланс: ${respone}"
</pre>
<p>или однострочный вариант:</p>
<pre class="brush: bash; light: true; title: ; notranslate">curl -sd "login=your_login_here&#038;password=your_password_here" http://antigate.com/panel.php |  sed -n -e 's/.*&lt;span class=\"hlinks\">\(.*\)&lt;\/span>.*/\1/p'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/bash/anticaptcha-balance-checker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Просматриваем скрытые фото Вконтакте</title>
		<link>http://wolf-et.ru/php/prosmatrivaem-skrytye-foto-vkontakte/</link>
		<comments>http://wolf-et.ru/php/prosmatrivaem-skrytye-foto-vkontakte/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 02:06:16 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[noshow]]></category>
		<category><![CDATA[vk]]></category>
		<category><![CDATA[vkontakte]]></category>
		<category><![CDATA[скрытые фото]]></category>
		<category><![CDATA[фото]]></category>
		<category><![CDATA[фотография защищена настройками приватности]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/?p=65</guid>
		<description><![CDATA[Довольно таки старый &#171;баг&#187; контакта, позволяющий просматривать закрытые фото (aka &#171;Фотография защищена настройками приватности&#171;). Как это работает? Берем нашу фотографию, которую хотим увидеть, ищем в URL ее id(через &#171;_&#171;, например 111111_111111) Заходим на свою стену и пишем: [[photo111111_111111]]qwert (после ]] обязательно необходимо добавить какую-нибудь комбинацию символов) В итоге на стену будет отправлено превью нашей фотографии, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-67" title="noshow" src="http://wolf-et.ru/wp-content/uploads/2010/06/noshow.gif" alt="" /></p>
<p>Довольно таки старый &#171;баг&#187; контакта, позволяющий просматривать закрытые фото (aka &#171;<strong>Фотография защищена настройками приватности</strong>&#171;).<br />
Как это работает?</p>
<p>Берем нашу фотографию, которую хотим увидеть,<br /> ищем в URL ее id(через &#171;<strong>_</strong>&#171;, например 111111_111111)<br />
Заходим на свою стену и пишем:<br />
<code><font color="green"><strong>[[photo111111_111111]]qwert</strong></font></code><br />
(после <font color="green"><strong>]]</strong></font> обязательно необходимо добавить какую-нибудь комбинацию символов)<br />
В итоге на стену будет отправлено превью нашей фотографии, по клику на которое мы получим полное фото. После этого запись на стене можно удалить.<br />
Слудующий скрипт выполняет все вышеописанные действия автоматически, от вас только требуется указать ссылку, например:<br />
<code><font color="green"><br />
<strong>http://vk.com/photos.php?act=show&#038;id=17555451_140583084&#038;uid=10824648</strong></font><br />
или<font color="green"><br />
<strong>http://vk.com/photo17555451_140583084</strong><br />
</font></code><br />
(Ссылки в примерах случайные &#8211; следовательно неработоспособные)</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
header('Content-Type: text/html; charset=utf-8');
echo '&lt;form method="get">&lt;input type="text" name="url" size="50"/>&lt;input type="submit" value="GET"/>';
if(!isset($_REQUEST['url']) || empty($_REQUEST['url']))die('Введите адрес картинки');
#################################
# Просматриваем скрытые фото Вконтакте
# by #Wolf#
# http://wolf-et.ru/
# License: gnu gpl v3
#################################
$email=''; //ваш логин
$pass=''; //ваш пароль
$url=$_REQUEST['url'];
function post($url,$post=false,$refer=false){//функция
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,0);//заголовки
if($header)
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch,CURLOPT_COOKIEJAR,'../cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEFILE,'../cookies.txt');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);
return $result;
}
function decode($hash)
{
  function hashes($str)
  {
      $length=strlen($str);
      $tmp="";
      for($i=0;$i&lt; $length;$i++)
      $tmp.=$str[$length-$i-1];
      return $tmp;
  }
      return  hashes(substr($hash,strlen($hash)-5).substr($hash,4,strlen($hash)-12));
}
function rand_s($num){
$a=array_merge(range('A','Z'),range('a','z'),range(0,9));
shuffle($a);
for($i=0;$i&lt;$num;$i++){
$t.=$a[array_rand($a)];
}
return $t;
}
//act=a_post_wall&#038;hash=c1ac3250fd1533fdda&#038;message=12313313&#038;to_id=197445970603&#038;top_id=&#038;type=0&#038;old=1
$result=iconv("windows-1251","UTF-8",post('http://vk.com/login.php','act=login&#038;success_url=&#038;fail_url=&#038;try_to_login=1&#038;to=&#038;vk=&#038;email='.$email.'&#038;pass='.$pass,'http://vk.com/'));//auth
preg_match('#[\d]+_[\d]+#',$url,$photo);
preg_match('#javascript:\spostWall\(([\d]+),\s\'([0-9a-f]+)\'\)#is',$result,$data);
$r=post('http://vk.com/wall.php','act=a_post_wall&#038;hash='.decode($data[2]).'&#038;message='.urlencode('[[photo'.$photo[0].']]').'test&#038;to_id='.$data[1].'&#038;top_id=&#038;type=0&#038;old=1');//отправляем
//print_r($data);
$regxp='#id=\\\"wallphoto_src'.$photo[0].'\\\" value=\\\"(.*?)\\\"\s\\\/>#';
preg_match_all($regxp, $r, $m);
preg_match_all('#deletePost\(([\d]+),[\s]?([\d]+),[\s]?\'([a-z0-9]{18})\'\)#is',$r,$del);
$img=str_replace("\\","",$m[1][0]);
post('http://vk.com/wall.php','act=a_delete&#038;oid='.$del[2][0].'&#038;cid='.$del[1][0].'&#038;hash='.$del[3][0].'&#038;old=1');//удаляем
echo '&lt;img src="'.$img.'" />';
?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/prosmatrivaem-skrytye-foto-vkontakte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>VK photos dumper</title>
		<link>http://wolf-et.ru/php/vk-photos-dumper/</link>
		<comments>http://wolf-et.ru/php/vk-photos-dumper/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 11:44:34 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/wp/?p=52</guid>
		<description><![CDATA[Сегодня мне понадобилось сохранить все фотографии из одного альбома ВКонтакте. Кратко опишу: Указываете ссылку на одну из фотографий в альбоме (пример vk.com/photo112028_151118304), и скрипт парсит javascript массив с url&#8217;ами изображений. Для этого необходимо включить &#171;Ускоренный режим просмотра фотографий&#171;, что мы и делаем устаналивая в куках значение remixnotajaxphotos равное нулю. В итоге полученный массив с url&#8217;ами [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мне понадобилось сохранить все фотографии из одного альбома ВКонтакте.<br />
<img alt="" src="http://wolf-et.ru/images/owlvk.jpg" title="owl" class="aligncenter" width="396" height="342" /><br />
Кратко опишу:<br />
Указываете ссылку на одну из фотографий в альбоме (пример vk.com/photo112028_151118304),<br />
и скрипт парсит javascript массив с url&#8217;ами изображений.<br />
Для этого необходимо включить &#171;<strong>Ускоренный режим просмотра фотографий</strong>&#171;,<br />
что мы и делаем устаналивая в куках значение <strong>remixnotajaxphotos</strong> равное нулю. В итоге полученный массив с url&#8217;ами картинок качаем в указанную директорию.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
set_time_limit(0);

$email='my_mail@gmail.com'; //ваш логин
$pass='my_password'; //ваш пароль
$albumurl='http://vk.com/photo111111_111111'; //ссылка на одну фотогарфию из альбома
$wdir=$_SERVER['DOCUMENT_ROOT'].'/vk'; // get full path. дописываем структуру папок от корня(/vk)
function post($url,$post=false,$refer=false){ //сопсно функция &lt;img src='http://wolf-et.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,1);//заголовки
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch,CURLOPT_COOKIE,'remixnotajaxphotos=0;'); //(Включаем ускоренный режим просмотра фотографий)ОБЯЗАТЕЛЬНО!
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');//пишем печеньки
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt'); //читаем печеньки
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);
return$result;
}
if(!file_exists($wdir)) //существует ли директория?
{if(!mkdir($wdir,0777,TRUE)) //НЕТ. пытаемся создать
{die('Cannot create folder &lt;b>&lt;fontcolor="red">'.$wdir.'&lt;/font>&lt;/b>.
Please change permissions on&lt;b>777&lt;/b>.');}}// не получилось =( die
$result=post('http://vk.com/login.php',
'act=login&#038;success_url=&#038;fail_url=&#038;try_to_login=1&#038;to=&#038;vk=&#038;email='.$email.'&#038;pass='.$pass,
'http://vk.com/');//auth
$result1=post($albumurl,false,'http://vk.com/profile.php');//go to album url
preg_match_all('#\\["(.*?)",[\\s]?"(.*?)",[\\s]?"(.*?)"\\]#i',$result1,$urls);//парсим фотки
foreach($urls[3] as $val){
$val=str_replace("\\","",$val);//удаляем экранирование символа "/"
preg_match('#([x|m]_.*?)[.]([jpg|gif|png$]{3})#i',$val,$names); //парсии имя файла и расширение
file_put_contents($wdir.'/'.$names[1].'.'.$names[2],file_get_contents($val));//качаем картинку и записываем в папку
}
?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/vk-photos-dumper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kinopoisk.ru Parser</title>
		<link>http://wolf-et.ru/php/kinopoisk-ru-parser/</link>
		<comments>http://wolf-et.ru/php/kinopoisk-ru-parser/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 08:44:12 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[kinopoisk]]></category>
		<category><![CDATA[kinopoisk.ru]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[кинопоиск]]></category>
		<category><![CDATA[парсер]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/wp/?p=48</guid>
		<description><![CDATA[Недавно мой знакомый (журналист на новостном портале) попросил меня &#171;накатать&#187; небольшой скриптик, для упрощения рутиной работы (копипастинг данных и оборачивание в BB-code). Парсит нижеприведенный список значений: 1)Назывние 2)Оригинальное название 3)Год 4)Страна 5)Слоган 6)Режиссер 7)Сценарий 8)Продюсер 9)Оператор 10)Композитор 11)Жанр 12)Бюджет 13)Сборы в США 14)Сборы в мире 15)Сборы в России 16)Премьера (мир) 17)Премьера (РФ) 18)Релиз на DVD [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="kinopoisk" src="http://wolf-et.ru/images/kinopoisk.jpg" alt="kinopoisk" width="300" height="300" /><br />
Недавно мой знакомый (журналист на новостном портале) попросил меня &#171;накатать&#187; небольшой скриптик, для упрощения рутиной работы (копипастинг данных и оборачивание в BB-code).<br />
Парсит нижеприведенный список значений:<br />
1)Назывние<br />
2)Оригинальное название<br />
3)Год<br />
4)Страна<br />
5)Слоган<br />
6)Режиссер<br />
7)Сценарий<br />
8)Продюсер<br />
9)Оператор<br />
10)Композитор<br />
11)Жанр<br />
12)Бюджет<br />
13)Сборы в США<br />
14)Сборы в мире<br />
15)Сборы в России<br />
16)Премьера (мир)<br />
17)Премьера (РФ)<br />
18)Релиз на DVD<br />
19)Релиз на Blu-Ray<br />
20)Рейтинг MPAA<br />
21)Время<br />
22)Описание<br />
23)Рейтинг Кинопоиск<br />
24)Рейтинг IMDb<br />
25)Картинка(логотип фильма)<br />
26)Ссылку на трейлер<br />
27)Картинку к трейлеру<br />
Парсер съедает ссылки вида:  <strong>http://www.kinopoisk.ru/level/1/film/251733/</strong> и просто ID фильма: <strong>251733</strong></p>
<p>Авторизация необходима для обхода бана.</p>
<p>Код:</p>
<pre class="brush: php; title: ; notranslate">
&lt;form method='get'>
&lt;input type='text' name='id' value='&lt;?php echo $m[0];?>' size="40">
&lt;input type='submit' value='get' name='submit'>
&lt;/form>
&lt;?
#################################
# Kinopoisk.ru parser
# by #Wolf#
# http://wolf-et.ru/
#################################
if(empty($_REQUEST['id'])){die("die");}
//header ("Content-type: text/html; charset=utf-8");
$user='login';
$password='password';
   function post($url,$post,$refer)
	{
	if($post==null){$post=false;}
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       curl_setopt($ch, CURLOPT_HEADER, 0);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cookie.txt");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cookie.txt");
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result  = curl_exec($ch);
	   return $result;
	}
	preg_match('#([0-9]{2,7})#',$_REQUEST['id'],$m);
	post('http://www.kinopoisk.ru/level/30/','shop_user[login]='.$user.'&#038;shop_user[pass]='.$password.'&#038;shop_user[mem]=on&#038;auth=%E2%EE%E9%F2%E8+%ED%E0+%F1%E0%E9%F2','http://www.kinopoisk.ru');
	$result=post('http://www.kinopoisk.ru/level/1/film/'.$m[0].'/',null,'http://www.kinopoisk.ru/');
    $result= iconv("cp1251", "utf8", $result);
	//echo $result;
	$parse=array(
	'name' =>         '#&lt;h1 style=\"margin: 0; padding: 0\" class="moviename-big">(.*?)&lt;/h1>#si',
	'originalname'=>  '#13px">(.*?)&lt;/span>#si',
	'year' =>         '#год&lt;/td>&lt;td class=\"\">(.*?)&lt;/td>&lt;/tr>#si',
	'country' =>      '#страна&lt;/td>&lt;td class=\"\">(.*?)&lt;/td>&lt;/tr>#si',
	'slogan' =>       '#слоган&lt;/td>&lt;td style="color: \#555">(.*?)&lt;/td>&lt;/tr>#si',
	'director' =>     '#режиссер&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'script' =>       '#сценарий&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'producer' =>     '#продюсер&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'operator' =>     '#оператор&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'composer' =>     '#композитор&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'genre' =>        '#жанр&lt;/td>&lt;td>(.*?)&lt;/td>&lt;/tr>#si',
	'budget' =>       '#бюджет&lt;/td>&lt;td class=\"dollar\">(.*?)&lt;/td>&lt;/tr>#si',
	'usa_charges' =>  '#США&lt;/td>&lt;td class=\"dollar\">(.*?)&lt;/td>&lt;/tr>#si',
	'world_charges'=> '#мире&lt;/td>&lt;td class=\"dollar\">(.*?)&lt;/td>&lt;/tr>#si',
	'rus_charges' =>  '#России&lt;/td>&lt;td class=\"dollar\">(.*?)&lt;/td>&lt;/tr>#si',
	'world_premiere'=>'#мир\)&lt;/td>&lt;td class=\"calendar\">(.*?)&lt;/td>&lt;/tr>#si',
	'rus_premiere' => '#РФ\)&lt;/td>&lt;td class="calendar">(.*?)&lt;/td>&lt;/tr>#si',
	'dvd' =>          '#dvd">(.*?)&lt;/td>&lt;/tr>#is',
	'bluray' =>       '#bluray">(.*?)&lt;/td>&lt;/tr>#is',
	'MPAA' =>         '#MPAA&lt;/td>&lt;td class=\"[\S]{1,100}\">&lt;a href=\'[\S]{1,100}\'>&lt;img src=\'/[\S]{1,100}\' height=11 alt=\'(.*?)\' border=0#si',
	'time' =>         '#id="runtime">(.*?)&lt;/td>&lt;/tr>#si',
	'description' =>  '#&lt;span class=\"_reachbanner_\">(.*?)&lt;/span>#si',
	'imdb' =>         '#IMDB:\s(.*?)&lt;/div>#si',
	'kinopoisk' =>    '#text-decoration: none">(.*?)&lt;span#si',
	'kp_votes' =>     '#&lt;span style=\"font:100 14px tahoma, verdana\">(.*?)&lt;/span>#si',
	 );

   $new=array();
   foreach($parse as $index => $value)
   {
   preg_match($value,$result,$matches);
   $new[$index]=preg_replace("#&lt;a.+?>(.+?)&lt;/a>#is","$1",$matches[1]);
   }
preg_match('#getTrailer\("(.*?)","(.*?)","(.*?)","[0-9]+","[0-9]+","(.*?)",""\);#i',$result,$trailer);
  /////////////////////////print//////////////////////////////
echo '[img]http://www.kinopoisk.ru/images/film/'.$m[0].'.jpg[/img]&lt;br />';
echo '[Ссылка на трейлер] http://'.$trailer[4].'.kinopoisk.ru/trailers/flv/'.$trailer[2].'&lt;br />';
echo '[Трейлер preview] http://'.$trailer[4].'.kinopoisk.ru/trailers/flv/'.$trailer[3].'&lt;br />';
echo '[b]Назывние:[/b]'.$new['name'].'&lt;br />';
echo '[b]Оригинальное название:[/b]'.$new['originalname'].'&lt;br />';
echo '[b]Год:[/b]'.$new['year'].'&lt;br />';
echo '[b]Страна:[/b]'.$new['country'].'&lt;br />';
echo '[b]Слоган:[/b]'.$new['slogan'].'&lt;br />';
echo '[b]Режиссер:[/b]'.$new['director'].'&lt;br />';
echo '[b]Сценарий:[/b]'.$new['script'].'&lt;br />';
echo '[b]Продюсер:[/b]'.$new['producer'].'&lt;br />';
echo '[b]Оператор:[/b]'.$new['operator'].'&lt;br />';
echo '[b]Композитор:[/b]'.$new['composer'].'&lt;br />';
echo '[b]Жанр:[/b]'.$new['genre'].'&lt;br />';
echo '[b]Бюджет:[/b]'.$new['budget'].'&lt;br />';
echo '[b]Сборы в США:[/b]'.$new['usa_charges'].'&lt;br />';
echo '[b]Сборы в мире:[/b]'.$new['world_charges'].'&lt;br />';
echo '[b]Сборы в России:[/b]'.$new['rus_charges'].'&lt;br />';
echo '[b]Премьера (мир):[/b]'.$new['world_premiere'].'&lt;br />';
echo '[b]Премьера (РФ):[/b]'.$new['rus_premiere'].'&lt;br />';
echo '[b]Релиз на DVD:[/b]'.$new['dvd'].'&lt;br />';
echo '[b]Релиз на Blu-Ray:[/b]'.$new['bluray'].'&lt;br />';
echo '[b]Рейтинг MPAA:[/b]'.$new['MPAA'].'&lt;br />';
echo '[b]Время:[/b]'.$new['time'].'&lt;br />';
echo '[b]Описание:[/b]'.$new['description'].'&lt;br />';
echo '[b]Рейтинг Кинопоиск:[/b]'.$new['kinopoisk'].'('.$new['kp_votes'].' )&lt;br />';
echo '[b]Рейтинг IMDb:[/b]'.$new['imdb'].'&lt;br />';
?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/php/kinopoisk-ru-parser/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Happy new year 0x7DA!</title>
		<link>http://wolf-et.ru/news/happy-new-year-0x7da/</link>
		<comments>http://wolf-et.ru/news/happy-new-year-0x7da/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 08:35:09 +0000</pubDate>
		<dc:creator>#Wolf#</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://wolf-et.ru/wp/?p=43</guid>
		<description><![CDATA[С праздником, дорогие друзья! /me загадал на новый год инвайт на habrahabr Большое спасибо inlanger&#8217;y за предоставленный инвайт! Смотрим HEX календарик с хабра :]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">С праздником, дорогие друзья!<br />
<img class="aligncenter" title="0x7DA" src="http://wolf-et.ru/images/hny.jpg" alt="0x7DA" width="391" height="383" /><br />
<del datetime="2009-12-31T08:31:27+00:00">/me загадал на новый год инвайт на habrahabr</del></p>
<p>Большое спасибо <a href="http://inlanger.habrahabr.ru/">inlanger&#8217;y</a> за предоставленный инвайт!</p>
<p style="text-align: center;">Смотрим <a href="http://habrahabr.ru/blogs/design/79696/">HEX календарик</a> с хабра :]<br />
<img class="aligncenter" src="http://anatolyrr.ru/habr/2010/preview.png" alt="hex calendar" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wolf-et.ru/news/happy-new-year-0x7da/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

