Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Как сделать вывод на печать на чужом форуме. (http://forum.oszone.net/showthread.php?t=91097)

Igor_I 28-09-2007 21:06 651231

Как сделать вывод на печать на чужом форуме.
 
На одном форуме нет возможности вывести топик в печатном виде. Вот как есть 10 сообщенй на странице, так и смотри. А очень хотелось бы вывести многостраничные топики на одной странице и, скажем, поискать что-нибудь.
Есть какие-нибудь идеи на этот счет? PHP, Javascript (?).

mar 28-09-2007 21:40 651248

не очень поняла - у тебя доступ к кодам форума, или ты хочешь для себя с внешней стороны приделать такую возможность?

в принципе
1) выясняем, по какому принципу составляется url по страницам
2) научаемся его генерировать по url первой страницы
3) научится парсить страницу, выгребая из нее нужную информацию
3) пишем скрипт (на своем сервере), получающий все затребованные страницы по первой (от первой гененрируем дальнейшие url, пока приходят нормальные ответы)
4) паросим результат, сливая значимую информацию вместе и, наверное, вставляя в родное обрамление

Интерфейс к этому - форма, куда можно занести url первой страницы---> потом склеенный результат

Если надо отвечать из своей псевдостраницы, то надо возиться с получением своей сессии-кук и т.д.

В общем, не уверена, что игра стоит свеч :)

Igor_I 28-09-2007 22:14 651271

для себя с внешней стороны приделать такую возможность

Игра свеч стоит, вот только отвечать не надо, надо только читать.

mar 28-09-2007 22:39 651288

ну, если отвечать не надо, то что-то типа того, что я по пунктам изобразила. С учетом *nix на машине вопрошающего - можно все оформить, как страничку на своем локальном апаче.
А можно выпендрится и еще и вход туда сделать из какой-нибудь кнопочки на панели firefox-а

Igor_I 28-09-2007 22:54 651293

не-а :) я так и останусь виндузятником :)
К сожалению тюнер нельзя (хотя и не пробовал) завести под никсы.
А про кнопочку думаю, только в опере :) Причем без кнопочки это не солидно. Сейчас копаю operafan, может найду чего.

Igor_I 20-10-2007 00:02 664015

Кое-как чего-то настряпал.
mar, самое сложное парсить страницу. Надо найти одну циферку показывающей общее количество страниц. Потому как более-менее отрабатываются ~ 15-20 страниц, поболее - сервер ничего не отвечает, больше 40 Windows выпадает в BSOD.
Потом убрать из всех страниц (кроме первой) head.
Запихнуть свой css -файл (чем?)
Убрать мелкие картинки, чем лучше - вырезать с помощью php, или спрятать с помощью css.




Паралельно с помощью css удаляю лишние элементы со страницы.
Возник вопрос. Предположим некоторый элемент удаляем со страницы с помощью:
PHP код:

span[class="gensmall"],
 *[
width="88"][height="31"]{
    
display:none !important;
 } 

Можно ли аналогично сделать для этого элемента функцию скрытый текст.
Как здесь - http://forum.oszone.net/thread-86772-7.html#post640859

Наверно понять что же я хочу трудно, но может кто поймет :)

Arrest 20-10-2007 01:36 664052

Igor_I
Не совсем понимаю, но скрытый текст делается так:
читать дальше »
Javascript-часть:
PHP код:

<script language="Javascript">
function 
toggle(element){
 if(
document.getElementById(element).style.display == "none"){
  
document.getElementById(element).style.display "inline";
  
document.getElementById(element "toggle").style.display "none";
 }
 if(
document.getElementById(element).style.display != "none"){
  
document.getElementById(element).style.display "none";
  
document.getElementById(element "toggle").style.display "inline";
 }
 return 
false;
}
</script> 

Сам html-код:
HTML код:

<span class="gen" id="hide1" onClick="toggle(hide1);">Какой-то текст</span><span id="hide1toggle" onClick="toggle(hide1);">смотреть...</span>
Писал на ходу, общая идея ясна, за ошибки не отвечаю =)

Igor_I 22-10-2007 01:07 664808

Arrest, как думаешь, можно ли использую UserJS в Опере, превратить обычный текст в скрытый?

Igor_I 28-11-2007 22:55 686923

Ну что же, будем позорится :)
читать дальше »

PHP код:

$url $_GET['url'];
$spages $_GET['spages'];
$numpages $_GET['numpages'];
$count $_GET['count'];
$contents '';

function  
getpage($urlp){

        global 
$page;

        
$fp fopen($urlp"r");                  // открыть файл

        
while (! feof($fp)) {
               
$page .= fread($fp,1000000);               // прочитать файл
        
}
           
fclose($fp);

           unset (
$urlp);
        return 
$page;
       }

function 
editpage ($page,$new) {

        unset (
$contentsone);
        global 
$contentsone;
        global 
$count;

        
$page2 explode ('head>'$page);                    // вырезать head
           
$page3 explode ('class="catHead"'$page2[2]);      //  удалить верх страницы  с рекламой

           
$page4 explode ('<!-- [begin]'$page3[1]);

           

        
$contentsone $page4[0];

        
$search = array ( "viewtopic.php?",
                          
"valign=\"top\" nowrap=\"nowrap\"",
                          
"valign=\"middle\" nowrap=\"nowrap\"");

        
$replace = array ("http://www.autolada.ru/viewtopic.php?",
                          
"style=display:none",
                          
"style=display:none");

        
$contentsone str_replace($search$replace$contentsone);

        if (
$new='1') {
            
$r=explode ('<span class="nav">Страница',$page3[1]);          // найти место ссылок на страницы
            
$r2=explode ('</span>',$r[1]);

            
$d=strip_tags ($r2[0]);                           // удалить тэги

            
preg_match_all ("/[0-9]{1,3}/",$d,$matches);
            
preg_match_all ("/^(title) + (\/title)/",$page2[1],$title);

            
$count $matches[0][1];
        }

        unset (
$page2);
        unset (
$page3);
        unset (
$page4);

        return 
$contentsone;
        return 
$count;
        return 
$title;
    }

function 
viewpage ($viewpage) {

        unset (
$view);

        
$prepage '<table class="forumline" width="100%" cellspacing="1" cellpadding="3" border="0">
                    <tr align="right">
                    <td class="catHead"'
;

        
$endpage '</table>';

          
$view $prepage.$viewpage.$endpage;

        echo 
$view;

         unset (
$view);
          unset (
$viewpage);

    }

$head ='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//RU">
<html dir="ltr">
<head>
<title>AUTOLADA.RU :'
.$title.':</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Style-Type" content="text/css">
<META name="home_url" content="http://www.autolada.ru/index.php">
<link rel="stylesheet" type="text/css" rel="nofollow" href="/go.php?url=http://www.autolada.ru/templates/subSilver/subSilver.css">
<body bgcolor="#E3E7ED" text="#000000" link="#006699" vlink="#5493B4" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="top"></a>
</TR>
</TABLE>
<style type="text/css">
td[valign="middle"][nowrap="nowrap"]{
display:none !important;
}
</style>
'
;


    if (!
$numpages) {

        
getpage($url);
        
editpage ($page,1);


        if (
$count 15){

            echo 
'<div align="center">Сколько страниц вы хотите получить? Максимум 15 страниц.
                  <form name="" action="" method="get">
                  <input name="url" type="hidden" value="'
.$url.'">
                  <input name="count" type="hidden" value="'
.$count.'">
                  Показать
                  <select size="1" name="numpages">'
;
             for (
$i 1$i <= 15$i ++) {
                 echo 
'<option value="'.$i.'">'.$i.'</option>';
                 }

             echo 
'</select> страниц,  начиная с
                  <select size="1" name="spages">'
;

             for (
$i 1$i $count$i ++) {
                 echo 
'<option value="'.$i.'">'.$i.'</option>';
                 }

            echo 
'</select>

                <br>
                <input type="submit" value="Получить">
                </form></div>'
;
        }

        else {

            echo 
$head;
            echo 
"<br><hr> 1 страница из ".$count;
            echo 
" .. urlprint= <a href=".$url.">".$url."</a>";

            
viewpage ($contentsone);

               unset (
$page);

            for (
$q 1$q $count$q ++) {

                echo 
"<br><hr> ".($q 1)." страница из ".$count;

                
$urlprintw $url.'&start='.$q*15;

                   echo 
" .. urlprint= <a href=".$urlprintw.">".$urlprintw."</a>";

                
getpage($urlprintw);
                unset (
$urlprintw);

                
editpage ($page,0);
                unset (
$page);

                
viewpage ($contentsone);
                unset (
$contentsone);
            }
        }
   }

       if (
$numpages) {

            echo 
$head;

            for (
$q 0$q < ($numpages); $q ++) {

                
$urlprintw $url.'&start='.($spages $q 1) * 15;

                echo 
"<br><hr> ".($spages $q)." страница <a href=".$urlprintw.">(".($spages $q).")</a> из ".$count." .. urlprint= <a href=".$urlprintw.">".$urlprintw."</a>";

                   
getpage($urlprintw);
                unset (
$urlprintw);

                
editpage ($page,0);
                unset (
$page);

                
viewpage ($contentsone);
                unset (
$contentsone);
            }
           } 



Выглядит это примерно так =

Жду критики :)

hasherfrog 11-01-2008 15:07 714205

Можно всё сделать (если уже не сделано?) с помощью javascript. Конкретнее, пишем букмарклет, который использует XHTTPRequest-ы для получения всех недостающих страниц. Если форум не шифруется*, то всё достаточно просто.

__
* Некоторые сайты не позволяют себя запрашивать слишком часто или шифруют контент javascript'ом.


Время: 08:50.

Время: 08:50.
© OSzone.net 2001-