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

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

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

Итак, как стало понятно уже модификация состоит из двух частей: программы, написанной на 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, так. С запросом я разобрался. Мне надо впихнуть этот запрос в отдельный файл потому как программа скрипт не поймет. Мне как лучше сделать?
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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