Перейти к контенту

Рекомендуемые сообщения

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

Итак, как стало понятно уже модификация состоит из двух частей: программы, написанной на Delphi и скрипта, который будет делать запрос к базе и выводить необходимую информацию в файл txt. Необходима квалифицированная помощь специалистов

В базе интересует лишь одна таблица, которая отвечает за информация о постах.

Надо получить файл скажем totals.txt в таком виде:

строка 1:ссылка на пост

строка 2: название темы

строка 3:дата поста

строка 4:автор поста

Я беру данные из таблицы ibf_posts и меня интересуют следующие поля:

ссылка на пост: llast_post

дата: очевидно start_date но я не уверен

автор поста: last_poster_name

Название темы: title

Как я понимаю сам запрос выглядит примерно так:

SELECT 
* 
INTO OUTFILE "/path/to/file"
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM table_name;

А вот более конкретно я уже ничего сам сделать не могу, так как не силен во взаимодействии PHP с базами данных. Требуется помощь!

Ссылка на комментарий
Поделиться на других сайтах

2man

 

Есть же уже один охотник, написанный на яве ?

Я чего-то не пойму зачем велосипед изобретать ?\

 

А если по сути вопроса, то OUTFILE не подойдёт.

Т.к. он делает выброс в какую-либо директорию хостинга.

А ты что будешь единственным пользователем этого охотника ?

 

Здесь нужно серверную часть делать на php скрипте, который будет подключаться к базе принимать нужную информацию и отсылать обратно клиенту.

 

строка 1:ссылка на пост

сам сформируешь в клиенте. Для этого тебе нужно знать id топика и id поста.

 

Остальное это так:

 

SELECT t.tid, p.pid, 
t.title, t.description, t.start_date, t.last_post, 
t.starter_id, t.last_poster_id,
t.starter_name, t.last_poster_name,
p.new_topic,
p.author_id, p.author_name, 
p.post_date, p.post 
FROM ibf_topics t, ibf_posts p 
WHERE p.topic_id=t.tid
ORDER BY t.tid, p.pid

 

t.tid - id топика;

p.pid - id поста;

t.title, t.description - название/описание топика;

t.start_date, t.last_post - время начала топика/последнего поста;

t.starter_id, t.last_poster_id, - id автора топика / id последнего ответившего в топик;

t.starter_name, t.last_poster_name - ник автора топика / ник последнего ответившего в топик;

p.new_topic - признак является ли текущий пост постом начала топика tid;

p.author_id, p.author_name - id/ник юзера каждого поста;

p.post_date - время каждого поста;

p.post - текст поста.

 

Этот запрос общего порядка и очень тормозной и напряжный.

Поэтому в секцию WHERE тебе ещё нужно подставлять условия из какого форума или топика брать инфу.

Ссылка на комментарий
Поделиться на других сайтах

Спасибо. Но я пишу себе такой же охотник, как на Винграде, не Винграде не глядя на него. Посмотрю что получиться[1130683236:1130702799]Так теперь надо сгенерить строки.

Получается мой скрипт для импорта будет состоять из n-числа таких запросов, где n - количество строк.

Сделать запрос к базе n-раз я смогу, а вот как быть с импортом информации в файл, если не Outfile то как?

Ссылка на комментарий
Поделиться на других сайтах

олучается мой скрипт для импорта будет состоять из n-числа таких запросов, где n - количество строк.

 

:D

 

ты php знаешь ?

Ссылка на комментарий
Поделиться на других сайтах

зачем n если можно вытащить всё одним запросом оттуда где нужно ?
Ссылка на комментарий
Поделиться на других сайтах

Слушай, зачем изобретать велосипед. Я же могу просто взять кусок кода из "новые сообщения" под шапкой форума, вынести в отдельный файл и скрипт готов. Останется только программерская часть.

Можешь его выложить сюда?

Ссылка на комментарий
Поделиться на других сайтах

Все я понял, мне коннект к базе не нуден вообще, потому как новые сообщения надо брать из кукисов каждого пользователя. Таблицу новых сообщений я буду брать из "мой помощник". Все что нужно на данный момент, это код авторизации на форум, чтобы взаимодействовать его в делфях[1131146229:1131148525]

function do_log_in()
   {
           //-----------------------------------------
           // INIT
           //-----------------------------------------

           $url    = "";
           $member = array();

           //-----------------------------------------
           // Load handler...
           //-----------------------------------------

           require_once( ROOT_PATH.'sources/handlers/han_login.php' );
           $this->han_login           =  new han_login();
           $this->han_login->ipsclass =& $this->ipsclass;
           $this->han_login->init();

           //-----------------------------------------
           // Make sure the username and password were entered
           //-----------------------------------------

           if ( $_POST['UserName'] == "" )
           {
                   $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_username' ) );
           }

            if ( $_POST['PassWord'] == "" )
            {
                   $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'pass_blank' ) );
           }

               //-----------------------------------------
               // Check for input length
               //-----------------------------------------

               if ( $this->ipsclass->vars['converge_login_method'] == 'username' )
               {
                       if ( $this->ipsclass->txt_mb_strlen( $_POST['UserName'] ) > 32 )
                       {
                               $this->ipsclass->Error( array( LEVEL => 1, MSG => 'username_long' ) );
                       }

                       $username = strtolower(str_replace( '|', '|', $this->ipsclass->input['UserName']) );
               }
               else
               {
                       $username = strtolower( trim( $this->ipsclass->input['UserName'] ) );
               }

               if ( $this->ipsclass->txt_mb_strlen( $_POST['PassWord'] ) > 32)
               {
                       $this->ipsclass->Error( array( LEVEL => 1, MSG => 'pass_too_long' ) );
               }

               $password = md5( $this->ipsclass->input['PassWord'] );

               //-----------------------------------------
               // Check auth
               //-----------------------------------------

               $this->han_login->login_authenticate( $username, $this->ipsclass->input['PassWord'] );

               //-----------------------------------------
               // Check return code...
               //-----------------------------------------

               $member = $this->han_login->member;

               if ( ( ! $member['id'] ) or ( $this->han_login->return_code == 'NO_USER' ) )
               {
                       $this->log_in_form( 'wrong_name' );
               }

               if ( $this->han_login->return_code != 'SUCCESS' )
               {
                       $this->log_in_form( 'wrong_auth' );
               }

               //-----------------------------------------
               // Is this a partial member?
               // Not completed their sign in?
               //-----------------------------------------

               if ( $member['members_created_remote'] )
               {
                       $pmember = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members_partial', 'where' => "partial_member_id={$member['id']}" ) );

                       if ( $pmember['partial_member_id'] )
                       {
                               $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['partial_login'], 'act=reg&CODE=complete_login&mid='.$member['id'].'&key='.$pmember['partial_date'] );
                               exit();
                       }
               }

               //-----------------------------------------
               // We in a validating group?
               // still need this?
               //-----------------------------------------

               if ($member['mgroup'] == $this->ipsclass->vars['auth_group'])
               {
                       //$this->log_in_form( 'need_validation' );
               }

               //-----------------------------------------
               // Generate a new log in key
               //-----------------------------------------

               if ( $this->ipsclass->vars['login_change_key'] OR ! $member['member_login_key'] )
               {
                       $member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key();

                       $this->ipsclass->DB->do_update( 'members', array( 'member_login_key' => $member['member_login_key'] ), 'id='.$member['id'] );
               }

               //-----------------------------------------
               // Cookie me softly?
               //-----------------------------------------

               if ($this->ipsclass->input['CookieDate'])
               {
                       $this->ipsclass->my_setcookie("member_id"   , $member['id']              , 1);
                       $this->ipsclass->my_setcookie("pass_hash"   , $member['member_login_key'], 1);
               }

               //-----------------------------------------
               // Remove any COPPA cookies previously set
               //-----------------------------------------

               $this->ipsclass->my_setcookie("coppa", '0', 0);

               //-----------------------------------------
               // Update profile if IP addr missing
               //-----------------------------------------

               if ( $member['ip_address'] == "" OR $member['ip_address'] == '127.0.0.1' )
               {
                       $this->ipsclass->DB->simple_construct( array( 'update' => 'members',
                                                                                                                 'set'    => "ip_address='{$this->ipsclass->ip_address}'",
                                                                                                                 'where'  => "id={$member['id']}"
                                                                                                )      );

                       $this->ipsclass->DB->simple_exec();
               }

               //-----------------------------------------
               // Create / Update session
               //-----------------------------------------

               $poss_session_id = "";

               if ( $cookie_id = $this->ipsclass->my_getcookie('session_id') )
               {
                       $poss_session_id = $this->ipsclass->my_getcookie('session_id');
               }
               else if ( $this->ipsclass->input['s'] )
               {
                       $poss_session_id = $this->ipsclass->input['s'];
               }

               //-----------------------------------------
               // Clean...
               //-----------------------------------------

               $poss_session_id = preg_replace("/([^a-zA-Z0-9])/", "", $poss_session_id);

               if ($poss_session_id)
               {
                       $session_id = $poss_session_id;

                       //-----------------------------------------
                       // Delete any old sessions with this users IP
                       // addy that doesn't match our session ID.
                       //-----------------------------------------

                       $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions',
                                                                                                                 'where'  => "ip_address='".$this->ipsclass->ip_address."' AND id <> '$session_id'"
                                                                                                )      );

                       $this->ipsclass->DB->simple_shutdown_exec();


                       $this->ipsclass->DB->do_shutdown_update( 'sessions',
                                                                                                        array (
                                                                                                                        'member_name'  => $member['members_display_name'],
                                                                                                                        'member_id'    => $member['id'],
                                                                                                                        'running_time' => time(),
                                                                                                                        'member_group' => $member['mgroup'],
                                                                                                                        'login_type'   => $this->ipsclass->input['Privacy'] ? 1 : 0
                                                                                                                  ),
                                                                                                        "id='".$session_id."'"
                                                                                                );
               }
               else
               {
                       $session_id = md5( uniqid(microtime()) );

                       //-----------------------------------------
                       // Delete any old sessions with this users IP addy.
                       //-----------------------------------------

                       $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions',
                                                                                                                 'where'  => "ip_address='".$this->ipsclass->ip_address."'"
                                                                                                )      );

                       $this->ipsclass->DB->simple_shutdown_exec();

                       $this->ipsclass->DB->do_shutdown_insert( 'sessions',
                                                                                                        array (
                                                                                                                        'id'           => $session_id,
                                                                                                                        'member_name'  => $member['members_display_name'],
                                                                                                                        'member_id'    => $member['id'],
                                                                                                                        'running_time' => time(),
                                                                                                                        'member_group' => $member['mgroup'],
                                                                                                                        'ip_address'   => $this->ipsclass->ip_address,
                                                                                                                        'browser'      => substr($this->ipsclass->clean_value($_SERVER['HTTP_USER_AGENT']), 0, 50),
                                                                                                                        'login_type'   => $this->ipsclass->input['Privacy'] ? 1 : 0
                                                                                                 )       );
               }

               $this->ipsclass->member           = $member;
               $this->ipsclass->session_id       = $session_id;

               if ($this->ipsclass->input['referer'] && ($this->ipsclass->input['act'] != 'Reg'))
               {
                       $url = str_replace( '&', '&', $this->ipsclass->input['referer'] );
                       $url = str_replace( "{$this->ipsclass->vars['board_url']}/index.{$this->ipsclass->vars['php_ext']}", "", $url );
                       $url = preg_replace( "!^\?!"       , ""   , $url );
                       $url = preg_replace( "!s=(\w){32}!", ""   , $url );
                       $url = preg_replace( "!act=(login|reg|lostpass)!i", "", $url );
               }

               //-----------------------------------------
               // set our privacy status
               //-----------------------------------------

               $this->ipsclass->DB->simple_construct( array( 'update' => 'members',
                                                                                                         'set'    => "login_anonymous='".intval($this->ipsclass->input['Privacy'])."&1'",
                                                                                                         'where'  => "id={$member['id']}"
                                                                                        )      );

               $this->ipsclass->DB->simple_shutdown_exec();

               //-----------------------------------------
               // Clear out any passy change stuff
               //-----------------------------------------

               $this->ipsclass->DB->simple_construct( array( 'delete' => 'validating',
                                                                                                         'where'  => "member_id={$this->ipsclass->member['id']} AND lost_pass=1"
                                                                                        )      );

               $this->ipsclass->DB->simple_shutdown_exec();

               //-----------------------------------------
               // Redirect them to either the board
               // index, or where they came from
               //-----------------------------------------

               $this->ipsclass->my_setcookie("session_id", $this->ipsclass->session_id, -1);

               $this->logged_in = 1;

               if ( USE_MODULES == 1 )
               {
                       $this->modules->register_class(&$this);
                       $this->modules->on_login($member);
               }

               if ( $this->ipsclass->input['return'] != "" )
               {
                       $return = urldecode($this->ipsclass->input['return']);

                       if ( preg_match( "#^http://#", $return ) )
                       {
                               $this->ipsclass->boink_it($return);
                       }
               }

               //-----------------------------------------
               // Check for dupemail
               //-----------------------------------------

               $member_extra = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'bio', 'from' => 'member_extra', 'where' => 'id='.$member['id'] ) );

               if ( $member_extra['bio'] == 'dupemail' )
               {
                       $this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang[thanks_for_login]} {$this->ipsclass->member['members_display_name']}", 'act=usercp' );
               }
               else
               {
                       $this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang[thanks_for_login]} {$this->ipsclass->member['members_display_name']}", $url );
               }
       }

вот это кажись он, там рядом и форма авторизации есть, но она пока не нужна. Song, так что мне тут можно обрезать, чтобы оставить только нужное: чтобы в проге юзер вводит логин и пароль, и когда запускает прогу программа производила авторизацию на форуме и выдавала инфу о постах.

Ссылка на комментарий
Поделиться на других сайтах

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

Там не всё так просто.

Такой ссылки просто-напросто не существует.

Ссылка на комментарий
Поделиться на других сайтах

Как найти тогда компромисс, чтобы форму авторизации в программе настроить под форму авторизации на форуме?
Ссылка на комментарий
Поделиться на других сайтах

Ты не совсем понял. Надо чтобы в программе вести логин и пароль, нажать ок -> программа конектится к форуму по этому логину и паролю, смотрит новые сообщения в помощнике для этого юзера -> отсылает обратно в программу таблицу с новыми сообщениями
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...
Song, так. С запросом я разобрался. Мне надо впихнуть этот запрос в отдельный файл потому как программа скрипт не поймет. Мне как лучше сделать?
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.