|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
Действительно нечего было делать, написал парсер башорга, умеет выполнять все функции с ним
Вот класс для работы с башоргом:
http://rapidshare.com/files/104604548/bash.php.html
(на рапиду выложил, т.к. тут исходники искажаются немного)
Вот доки по классу
PHP код:
Все переменные - private, инфо просто для ознакомления
$bash_url - url страницы башорга
$bash_text - текст какой-либо из страниц башорга
$bash_arr - массив пропарсенных цитат
$bash_type - страница, которую читаем
$bash_page - номер страницы, которую читаем
$bash_max_page - максимальная страница
$bash_curr_page - текущая страница
$bash_last_quote - последняя прочитанная цитата
$bash_q_num - номер прочитанной цитаты
$bash_approved - число добавленных за день цитат
Методы класса
Bash($url='bash.org.ru') - конструктор класса, $url - адрес башорга:)
get_bash_text() - public, возвращает весь полученный функцией bash_read контент
get_bash_arr() - public, возвращает весь полученный функцией bash_read контент
bash_read($typ=0,$page=1,$stext='') - public, главная функция, читает башорг
$typ==0 - читает главную страницу
$typ==1 - читает страницу "по рейтингу", можно указать $page - номер страницы
$typ==2 - читает бездну
$typ==3 - читает топ бездны
$typ==4 - читает "случайные"
$typ==5 - читает конкретную цитату с номером $page
$typ==6 - ищет цитаты среди добавленных, нужно задать $stext - строка поиска
$typ==7 - ищет цитаты в бездне, нужно задать $stext - строка поиска
$typ==8 - читает страницу "по дате", можно указать $page - номер страницы
bash_socket($service_uri,$ref='',$method='GET') - private, работает с сокетами
bash_parse() - public, парсит полученную с помощью bash_read страницу
Если были считаны главная/"по рейтингу"/"случайные"/конкретная цитата по номеру/"по дате"/был произведён поиск в добавленных, то
возвращается массив array('id','rating','approved','date','cite'), где id - массив номеров цитат, rating - массив и рейтингов, approved - массив ников
тех, кто добавлял цитаты, date - массив дат и времён добавления, cite - массив текстов цитат.
Кроме того, если были считаны страницы "по рейтингу"/"по дате", функция определяет текущую страницу и максимальное число страниц, их можно получить
с помощью get_curr_page и get_max_page соответственно. Если же была считана главная страница, то определяется число добавленных за последние сутки цитат,
его можно получить с помощью get_approved_num.
Если была считана бездна/произведён поиск по бездне, то возвращается массив array('id','date','cite').
Если был считан топ бездны, то возвращается массив array('id','rating','date','cite').
get_number() - public, возвращает число найденных на странице цитат
get_page_name() - public, возвращает имя последней считанной страницы
get_max_page(), get_curr_page() - public, см. bash_parse
rate_cite($id,$typ=0,$inabyss=0) - public, изменяет рейтинг цитаты с номером $id. Если $typ==0, то ставится "+", если 1, то "-", если "2", то "боян"
Если голосовать нужно за цитату в бездне, то укажите $inabyss==1, если же за уже добавленную цитату, то 0.
Функция возвращает строку 'abyss', если после голосования был редирект на бездну, либо номер цитаты, на которую был редирект, либо 0, если не удалось распознать ни первое ни второе.
get_cite_rate($id) - public, получает рейтинг добавленной цитаты с номером $id
bash_add($cite='') - public, добавляет цитату с текстом $cite
get_approved_num() - public, см. bash_parse
Пример: для того, чтобы вывести свеженькие сегодняшние цитаты с главной страницы, достаточно такого кода:
require_once("bash.php"); //подключаем класс
$bash=new Bash(); //создаём объект
$bash->bash_read(); //читаем главную
$cite=$bash->bash_parse(); //парсим её
$anum=$bash->get_approved_num(); //получаем число добавленных сегодня цитат
$num=$bash->get_number(); //получаем число найденных цитат
if($anum>$num) $anum=$num; //если добавлено было больше, чем отображается
for($i=0;$i<$anum;$i++)
{
print "<hr>{$cite['cite'][$i]}"; //выводим цитатки
}
Вот пример простого ридера баша на базе моего класса:
PHP код:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Bash.Org.Ru Reader by DX</title>
<style>
body
{
font-family:'Arial';
font-size:12;
}
hr
{
height: 1px;
color:black;
border:none;
background-color:blac;
}
.header
{
font-size:16;
font-weight:bold;
}
.bkg
{
background-color:#99bbff;
}
a,a:active,a:visited
{
color:#34498B;
text-decoration:none;
font-weight:700;
}
a:hover
{
color: blue;
font-weight:700;
text-decoration:underline;
}
input
{
BORDER: rgb(50,50,50) 1px outset;
FONT-SIZE: 11px;
font-family:Arial;
}
</style></head>
<body>
<b><a href="?loc=0">Главная App.</a> | <a href="?loc=10">Главная All</a> | <a href="?loc=3">Топ бездны</a> | <a href="?loc=2">Бездна</a> | <a href="?loc=1">По рейтингу</a>
| <a href="?loc=4">Случайные</a></b><form action="" method="get"><input type="hidden" name="loc" value="5">ID цитаты: <input type="text" name="page"> <input type="submit" value="Читать"></form><hr>
<?php
error_reporting(E_ALL);
require_once("bash.php");
$loc=isset($_GET['loc']) ? $_GET['loc'] : 0;
$cid=isset($_GET['id']) ? $_GET['id'] : 0;
if($loc==1 || $loc==5)
$page=isset($_GET['page']) ? $_GET['page'] : 1;
else
$page=1;
$bash=new Bash();
$a=isset($_GET['a']) ? $_GET['a'] : 0;
if($loc=='6')
{
$tmp=$bash->rate_cite($cid,0,$a);
$loc=$tmp=='abyss' ? 2 : 5;
$page=$cid;
}
else if($loc=='7')
{
$tmp=$bash->rate_cite($cid,1,$a);
$loc=$tmp=='abyss' ? 2 : 5;
$page=$cid;
}
else if($loc=='8')
{
$tmp=$bash->rate_cite($cid,2,$a);
$loc=$tmp=='abyss' ? 2 : 5;
$page=$cid;
}
$xloc=$loc;
if($loc==10) $loc=0;
$bash->bash_read($loc,$page);
$cite=$bash->bash_parse();
if($xloc==0) $anum=$bash->get_approved_num(); else $anum=0;
$num=$bash->get_number();
if($xloc==0)
{
if($anum>100) $anum=$num;
}
else
{
$anum=$num;
}
print "<center><span class='header'>".$bash->get_page_name()."</span></center><hr><b>Найдено: $anum</b>";
$ptxt='';
if($loc==1)
{
$ptxt="<br><b>Страницы: </b>";
$maxp=$bash->get_max_page();
$curp=$bash->get_curr_page();
$ptxt.="<a href='?loc=1&page=1'>первая</a> || ";
if($curp>1)
{
$tmp=$curp-1;
$ptxt.="<a href='?loc=1&page=$tmp'><<<предыдущая</a> ";
}
$ptxt.='<b>'.$curp.'</b>';
if($maxp>$curp)
{
$tmp=$curp+1;
$ptxt.=" <a href='?loc=1&page=$tmp'>следующая>>></a>";
}
$ptxt.=" || <a href='?loc=1&page=$maxp'>последняя</a>";
print $ptxt;
}
for($i=0;$i<$anum;$i++)
{
print "<hr><span class='bkg'>#{$cite['id'][$i]} | {$cite['date'][$i]}";
if(isset($cite['rating'][$i]))
print " | <b>Rate</b>: {$cite['rating'][$i]}";
if(isset($cite['approved'][$i]))
print " | <b>{$cite['approved'][$i]}</b>";
if($loc==0 || $loc==1 || $loc==5 || $loc==4) $a=0; else $a=1;
print " || <a href='?loc=6&id={$cite['id'][$i]}&a=$a'>:D</a> | <a href='?loc=7&id={$cite['id'][$i]}&a=$a'>:(</a> | <a href='?loc=8&id={$cite['id'][$i]}&a=$a'>:X</a>";
print '</span><br>'.$cite['cite'][$i];
}
if($ptxt)
print '<hr>'.$ptxt;
?>
</body></html>
|