Поисковая форма:) поиск по free-lance.ru Топ/история/обновления фриланса, по разным параметрам (темы, сообщения, пользователи...) Автоматическое удаление постов от ненужных юзеров в топике (php скрипт) Досье(точный ник)
 

Ник (или часть ника):
?
Какой текст ищем:
?
Раздел блогов:
За срок
дней
Тип поиска: (по вхождению: по тексту гуг выдаст посты с "гуг", "гугл", "огугл"; "полнотекстовый": по тексту "гуг" выдаст посты только с "гуг")
По вхождению строки:  Полнотекстовый: 
(поиск не 100% актуальный, есть определённая задержка при обновлении данных для поиска. )
0 Всего найдено: 38
cramen Сообщение 01/03/2012 15:32 Копия темы
да, наверное, раз так и не смог понять хода Вашим мыслей для получения этого вывода...
cramen Сообщение 01/03/2012 15:15 Копия темы
смета составляется из простейшего отношения – рублей/дней
ну если за 100 рублей в день – это нормальная для кого то зарплата, то для меня нет, т.к. кроме хлеба с водой мне нужно еще за квартиру платить, одежду покупать, иметь мясные продукты в рационе, платить за интернет, немного откладывать на отпуск и т.д. все житейские потребности.

а сделать большой интернет магазин за даже 5000 рублей не получится, т.к. один дизайн как минимум займет неделю, не говоря о составлении ТЗ, верстке, программировании, согласованиях и т.п.
cramen Сообщение 01/03/2012 14:53 Копия темы
не понимаю суть Вашего сообщения, но когда в студии сайт стоит 40000, с учетом всех вычетов, фрилансер может позволить минимальную стоимость этой работы в 17000-20000, а заказчик больше 3000 заэту работу не дает и уверен, что за три недели работы по 1000 рублей в неделю – это просто отличная зарплата.
cramen Сообщение 01/03/2012 14:45 Копия темы
Ага и канарейка в костюме супермена.
А еще "скрипт сайта типа фриланса и вконтакте" (c) )
cramen Сообщение 01/03/2012 14:37 Копия темы
ну так за 2000 заказчик хочет не из шаблонов, а с уникальным креативным дизайном, да еще чтобы "завтра было, что показать"
cramen Сообщение 01/03/2012 14:34 Копия темы
да дело не в дороже или так же.
допустим организация 10% от проекта забирает себе, 20% получает директор, 20% менеджер. (ну это грубо)
ну тогда оставшаяся сумма и есть стоимость работы.
Но не в 10 раз же. Если работа занимает две недели, и стоит 2000 рублей, то это ни в какие рамки не лезет. Дворник больше получает, чем хотят платить заказчики фрилансерам.
cramen Сообщение 01/03/2012 14:13 Копия темы
Экономия эти стили слишком расширяли блоги и они ломались, поэтому пока закомментил-->
Почему люди(заказчики) приходя к фрилансерам хотят, чтобы им выполнили работу в 10 раз дешевле, чем в организации?
Ну вот стоит в организации сделать небольшой сайт 20000 рублей. Ну как эту работу можно уложить в 2000 рублей? И почему заказчики уверены, что можно?
cramen Сообщение 22/01/2012 09:13 Копия темы
У меня в unix like не заработает.
На java надо писать, чтоб везде работало ;)
cramen Сообщение 20/01/2012 00:10 Копия темы
да, я об этом думал, но тогда был бы не тот эффект ;)
cramen Сообщение 19/01/2012 22:56 Копия темы
затянуло? ))
cramen Сообщение 19/01/2012 22:55 Копия темы
так я тоже не с серьезным лицом )
cramen Сообщение 19/01/2012 22:50 Копия темы
как это? ))
Это же самая лучшая!
cramen Сообщение 19/01/2012 22:37 Копия темы
Саммая лучшая программа. Часто наблюдаю, как люди начинают путаться и задавать вопросы, видя перед собой 5-10 кнопок(даже меньше) с русскими надписями. Специально для ...
Набросал прототип самой лучшей программы. Такая программа позволит свести к минимуму все вопросы пользователей. Но, думаю, инструкцию и на нее надо написать.
По ссылке ниже можно опробовать и убедиться.
cramen.ru/makeup/bestprog...

p.s. Конечно же это шутка, но в каждой шутке есть доля правды ;)
cramen Сообщение 24/10/2011 20:03 Копия темы
Задрали уже эти посредники. Они + школьники создают 80% шлака на сайте.
cramen Сообщение 05/09/2011 19:53 Копия темы
думаю, первый вариант и гневный камент относительно таких сайтов будет считаться за Ваш вариант ))
cramen Сообщение 05/09/2011 19:36 Копия темы
Если на посещаемом Вами сайте заиграет музыка как Вы поступите?
Если не сложно, объясните свою позицию в комментариях.
cramen Сообщение 24/07/2011 08:36 Копия темы
Читал. Не лучше )
cramen Сообщение 24/07/2011 07:44 Копия темы
Да можно было и в ворде или опенофисе проверить орфографию, если нет корректора.
cramen Сообщение 24/07/2011 07:38 Копия темы
Я думаю, что вопрос безграмотности намного шире и выходит далеко за пределы интернета.
cramen Сообщение 24/07/2011 07:36 Копия темы
Спасибо )
cramen Сообщение 24/07/2011 07:15 Копия темы
Это просто лень или подросли дети ЕГЭ. Все чаще начинают встречаться заголовки проектов, которые вроде и содержат грамматически правильные слова, но сами эти слова довольно странно состыкованы. Причем способы стыковки странные как по причине расстановки неверных окончаний так и по причине общего непонимания процесса производства сайтов.
Примеры таких заголовков:

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

И таких примеров жутко много. И я не касаюсь содержания проектов. Это только заголовки.
Скажите, откуда берутся такие заголовки? Из за лени проверить написанное или это действительно нахлынула волна жертв ЕГЭ?

p.s. Если Вы один из заказчиков, не в обиду, примите за правило перечитывать написанный Вами текст, перед нажатием кнопки "отправить". Ато такие мрачные тексты уж очень отталкивают, навеивая сомнения в целесообразности сотрудничества ;)
cramen Сообщение 31/01/2011 09:44 Копия темы
Да, это просто кошмар.
Иногда такого начитаешься...
cramen Сообщение 31/01/2011 09:43 Копия темы
Ну к сожалению тут большинство работодателей – школьники, которые делают по две ошибки на слово и хотят "зделать сациальную сети типа вот этой(тут адрес) толька дизаин нада чтобы был более савременным. плачу 1500 рублей.".
Или "заверстать и натянуть".
Адекватных людей давно уже не видать ))
cramen Сообщение 31/01/2011 09:39 Копия темы
убрал )
cramen Сообщение 31/01/2011 09:31 Копия темы
Что что а вот это забыл )
Но уже поздно добавлять. Статистика нарушится.
Да и бюджет немного другого класса параметр. Более адекватным было бы отношение бюджета к временным затратам.
cramen Сообщение 31/01/2011 09:11 Копия темы
Каковы ваши критерии при выборе работодателя?
cramen Сообщение 22/01/2011 12:08 Копия темы
в исходных кодах )
документация по созданию с нуля расширения для хрома.
фритрей – это только под винду сделано. а это для любой ОС расширение хрома.
cramen Сообщение 22/01/2011 12:00 Копия темы
Расширение для google chrome для сайта free-lance.ru написал две статьи в своем блоге по созданию расширения, позволяющего оперативно получать информацию о новых проектах на free-lance.ru
первая часть cramen.ru/blog/post/19
вторая часть cramen.ru/blog/post/20
cramen Сообщение 06/10/2010 17:08 Копия темы
Почему не любят фрилансеров и где делают качественные сайты? Давно известный "факт", что заказ сайта на фрилансе заканчивается получение неудобоваримого и некачественного продукта.

Откуда появилось такое мнение? Давайте немного Разберемся. 

Какие бывают заказчики?

  • Матерые с большими кошельками. (Понимают, что работа стоит денег и занимает не мало времени. Платят адекватно. Среди них часто встречаются веб студии. (бывают и исключения. К примеру вот эти господа: trkvolgamoll.ru ) )

  • Матерые, не имеющие денег. (Все понимают, но платить не могут и предлагают долю от проекта или платят врассрочку.)

  • Новички, понимающие, что такое веб. (Частично понимают, как устроены сайты, но платыт более менее адекватно.)

  • Новички с амбициями, но нулевыми зананиями. (Часто просят сделать интернет магазин под ключ за 1000-2000 рублей и чтобы завтра уже "было на чтопосмотреть")


Какие бывают фрилансеры?

  • Имеющие большой стаж волки, поработавшие не в одной веб студии. (Просят приличную, но адекватную цену за разработку)

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

  • Студенты, почитавшие вчера учебник по php. (Им показалось, что все легко. Пишут г. сайты на лапше. Просят не много. Заработать 2000 за 2 недели и пропить их с друзьями для них за счастье.)


Все довольно очевидно. Такую классификацию заказчиков и фрилансеров может составить почти каждый.

Но самое интересное получается, когда посмотреть на их соотношение. Заказчиков новичков из 3-го и 4-го пунктов подавляющее большинство. Фрилансеры опять же, бОльшая часть – это студенты из 2-го и 3-го пункта.

Что же получается? То самое большинство заказчиков хотят найти исполнителей подешевле. А большинство исполнителей-фрилансеров, живущих на деньги родителей, занимаются демпингом цен(им все равно, 2000 они получат или 1500, все равно это много пива). Вот и получается, что большинство сайтов делается не профессионалами для не профессионалов.

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

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

p.s. Господа заказчики. Будьте адекватны при оплате и определении сроков. Ну не бывает так, чтобы сайт под ключ(даже самый простой) стоил 2000 рублей и делался за 1 день. Да, можно на джумле по быстрому накидать несколько страниц с шаблонным дизайном, в который вставят ваш логотип. Но ведь это не презентабельно! Один дизайн от 3000 стоит. Не забываем про верстку и программирование. Каждый этап занимает время. Более того, если сайт сложнее визитки, желательно составить хотя бы краткое техническое задание. Времени это занимает не менее недели. Но зато вы получаете презентабельный, красивый, удобный в управлении, одинаково отображающийся во всех браузерах сайт.

Пожалуйста, помните об этом и не забывайте русскую поговорку: "Скупой платит дважды".
cramen Сообщение 04/08/2010 07:18 Копия темы
Чтобы подтвердить, что это ваш номер телефона.
СМС входящая бесплатно.
cramen Сообщение 04/08/2010 04:52 Копия темы
Регистрация бесплатно.
Стоимость одной СМС 50 копеек. Это дешевле, чем у остальных СМС сервисов.
cramen Сообщение 02/08/2010 08:49 Копия темы
Отправляем SMS.ru с удобством Было дело, проскакивала на хабре статься о сервисе sms.ru
Попробовал, работает. Понравилось. Тогда на этом дело и закончилось.
Но вот недавно потребовалось мне сделать отправку SMS подписавшимся клиентам. API на сайте сервися хорошо документирован и приведены примеры, но не хватает удобства использования. В результате написал небольшой класс для взаимодействия с sms.ru.

   

<?php

/**
* Класс взаимодействия с сервисом sms.ru
*/
class Z_Service_Sms {

   protected $_apiId = NULL;
   protected $_responseCode = NULL;
   protected $_lastAction = NULL;

   const HOST      = 'http: // sms.ru/';
   const SEND      = 'sms/send?';
   const STATUS   = 'sms/status?';
   const BALANSE   = 'my/balance?';
   const LIMIT      = 'my/limit?';

   protected $_responseCodeTranstale = array(
      'send'      =>   array(
         '100'      =>   'Сообщение принято к отправке',
         '200'      =>   'Неправильный api_id',
         '201'      =>   'Не хватает средств на лицевом счету',
         '202'      =>   'Неправильно указан получатель',
         '203'      =>   'Нет текста сообщения',
         '204'      =>   'Имя отправителя не согласовано с администрацией',
         '205'      =>   'Сообщение слишком длинное (превышает 5 СМС)',
         '206'      =>   'Превышен дневной лимит на отправку сообщений',
         '207'      =>   'На этот номер нельзя отправлять сообщения',
         '208'      =>   'Параметр time указан неправильно',
         '210'      =>   'Используется GET, где необходимо использовать POST',
         '211'      =>   'Метод не найден',
         '220'      =>   'Сервис временно недоступен, попробуйте чуть позже.',
      ),
      'status'   =>   array(
         '-1'      =>   'Сообщение не найдено',
         '100'      =>   'Сообщение находится в очереди',
         '101'      =>   'Сообщение передается оператору',
         '102'      =>   'Сообщение отправлено (в пути)',
         '103'      =>   'Сообщение доставлено',
         '104'      =>   'Не может быть доставлено: время жизни истекло',
         '105'      =>   'Не может быть доставлено: удалено оператором',
         '106'      =>   'Не может быть доставлено: сбой в телефоне',
         '107'      =>   'Не может быть доставлено: неизвестная причина',
         '108'      =>   'Не может быть доставлено: отклонено',
         '200'      =>   'Неправильный api_id',
         '210'      =>   'Используется GET, где необходимо использовать POST',
         '211'      =>   'Метод не найден',
         '220'      =>   'Сервис временно недоступен, попробуйте чуть позже',
      ),
      'balanse'   =>   array(
         '100'      =>   'Запрос выполнен',
         '200'      =>   'Неправильный api_id',
         '210'      =>   'Используется GET, где необходимо использовать POST',
         '211'      =>   'Метод не найден',
         '220'      =>   'Сервис временно недоступен, попробуйте чуть позже.',
      ),
      'limit'   =>   array(
         '100'      =>   'Запрос выполнен',
         '200'      =>   'Неправильный api_id',
         '210'      =>   'Используется GET, где необходимо использовать POST',
         '211'      =>   'Метод не найден',
         '220'      =>   'Сервис временно недоступен, попробуйте чуть позже.',
      ),
   );

   /**
    *
    * Идентификатор api_id
    * @param string $id
    */
   public function __construct($id)
   {
      $this->_apiId = $id;
   }

   /**
    *
    * @param string $to телефон: 11 знаков. например 79060000000
    * @param string $text текст сообщение
    * @param string $from отправитель
    * @return string id сообщения
    */
   public function send($to,$text,$from=NULL)
   {
      $url = self::HOST.self::SEND.'api_id='.$this->_apiId;
      $url .= '&to='.$to;
      $url .= '&text='.urlencode($text);
      if ($from)
         $url .= '&from='.urlencode($from);

      $body = file_get_contents($url);
      @list($code,$smsId) = explode("\n", $body);
      $this->_lastAction      = 'send';
      $this->_responseCode   = $code;
      return $smsId;
   }

   /**
    *
    * @param string $id id сообщения
    * @return string код статуса сообщения.
    */
   public function status($id)
   {
      $url = self::HOST.self::STATUS.'api_id='.$this->_apiId;
      $url .= '&id='.$id;
      $body = file_get_contents($url);
      $status = $body;
      $this->_lastAction      = 'status';
      $this->_responseCode   = $status;
      return $status;
   }

   /**
    *
    * @return string Баланс в рублях
    */
   public function balanse()
   {
      $url = self::HOST.self::BALANSE.'api_id='.$this->_apiId;
      $body = file_get_contents($url);
      @list($code,$balance) = explode("\n", $body);
      $this->_lastAction      = 'balanse';
      $this->_responseCode   = $code;
      return $balance;
   }

   /**
    *
    * @return int количество оставшихся сообщений
    */
   public function limit()
   {
      $url = self::HOST.self::LIMIT.'api_id='.$this->_apiId;
      $body = file_get_contents($url);
      @list($code,$count,$limit) = explode("\n", $body);
      $this->_lastAction      = 'limit';
      $this->_responseCode   = $code;
      return (int)($count – $limit);
   }

   /**
    *
    * @return string код результата выполнения последней операции
    */
   public function getResponseCode()
   {
      return $this->_responseCode;
   }

   /**
    *
    * @return string расшифровка кода результата выполнения последней операции
    */
   public function getResponseMessage()
   {
      if ($this->_lastAction)
         return $this->_responseCodeTranstale[$this->_lastAction][$this->getResponseCode() ];
      else
         return 'Нет данных для возврата сообщения';
   }

}
cramen Сообщение 22/07/2010 09:10 Копия темы
не перестанет, т.к. вы только MX записи будете редактировать. A и CNAME вас не будут просить трогать.
cramen Сообщение 22/07/2010 09:02 Копия темы
Храни каждую сущность в отдельной таблице.
Если это все надо как-то увязать в общую структуру, то добавляй таблицы, которые это увязывают(меню, структура и т.п.).
Универсального рецепта нет и не будет. Есть популярные.
Если хочется разобраться, как они работают, разбери популярные CMS: ModX, Umi, Bitrix, Drupal
cramen Сообщение 22/07/2010 08:52 Копия темы
вот так $sql = mysql_query("SELECT gallery.tag AS tag1, gallery_album.tag AS tag2 FROM gallery, gallery_album WHERE 
gallery.tag LIKE '%,".$row[id].",%' OR 
gallery.tag LIKE '".$row[id].",%' OR 
gallery_album.tag LIKE '%,".$row[id].",%' OR 
gallery_album.tag LIKE '".$row[id].",%' 
");
cramen Сообщение 22/07/2010 08:40 Копия темы
Zend_ACL: Хранение в базе данных Рано или поздно все сталкиваются с проблемой контроля доступа и гибкостью управления этим контролем.

В Zend Framework есть замечательный компонент. Называется Zend_Acl.
И все вроде-бы хорошо. Нужные задачи он решает, но его конфигурирование стоит больших усилий, даже с использованием конфига и ресурслоадера.
Хотелось-бы переложить задачу его конфигурирования на отдельный класс, управляемый информацией из БД.   
Была создана структура БД, в которую укладывались все возможности, которые предоставляет Zend_Acl.

Дамп и схема этой БД находится в приложенных файлах. Так-же там находятся все необходимые для работы классы моделей.

Итак, сам код необходимого нам класса:

<?php
class Z_Acl extends Zend_Acl
{
      protected static $instance = null;

      public function __construct()
      {
            $resourcesModel = new Z_Model_Resources();
            $resources = $resourcesModel->fetchAll()->toArray();
            
            $resourceById = array();
            foreach ($resources as $resource)
             $resourceById[$resource['id']] = $resource['resourceId'];

            $res_added = false;
while(!$res_added)
{
            $res_added = true;
            foreach($resources as $resource)
            {
             $parentResourceId = array_key_exists($resource['parentid'],$resourceById)?$resourceById[$reso urce['parentid']]:NULL;
                  if ($parentResourceId==NULL || $this->has($parentResourceId))
                  {
                   if (!$this->has($resource['resourceId']))
                   $this->addResource($resource['resourceId'], $parentResourceId);
                  }
                  else
                  {
                   $res_added = false;
                  }
            }
}

            $rolesModel = new Z_Model_Roles();
            $roles = $rolesModel->fetchAll()->toArray();// !!!
            foreach($roles as $role)
            {
                  $this->addRoleParents($role);// !!!
                  if(!$this->_getRoleRegistry()->has($role['roleId']))
                  {
                        $this->addRole($role['roleId'], $rolesModel->getParentsArray($role['id']));
                  }
            }

            $privilegesModel = new Z_Model_Privileges();
            $rulesModel = new Z_Model_Rules();
            $rules = $rulesModel->getAllRules();
            foreach($rules as $rule)
            {
                  if(empty($rule['roleId']))
                  {
                        $rule['roleId'] = null;
                  }
                  if(empty($rule['resourceId']))
                  {
                   $rule['resourceId'] = null;
                  }

                  $privileges = $privilegesModel->getRulePrivileges($rule['id']);
                  foreach ($privileges as $privilege)
                  {
                  if(empty($privilege))
      {
      $privilege = null;
      }
      if('allow' === $rule['rule'])
                  {
                        $this->allow($rule['roleId'], $rule['resourceId'], $privilege);
                  }
                  elseif('deny' === $rule['rule'])
                  {
                        $this->deny($rule['roleId'], $rule['resourceId'], $privilege);
                  }
                  else
                  {
                        require_once' Zend/Acl/Exception.php';
                        throw new Zend_Acl_Exception("Unsupported rule type; must be either' "
                        . self::TYPE_ALLOW ." ' or' "
                        . self::TYPE_DENY ." '");
                  }
                  }
            }
      }

      /**
       *   
       * @param $role
       */
      public function addRoleParents($role)
      {
            $rolesModel = new Z_Model_Roles();
            $parents = $rolesModel->getParents($role['id']);
            foreach($parents as $parent)
            {
                  $this->addRoleParents($parent);
                  if(!$this->_getRoleRegistry()->has($parent['roleId']))
                  {
                        $this->addRole($parent['roleId'], $rolesModel->getParentsArray($parent['id']));
                  }
            }
      }

      /**
       * @return Z_Acl
       */
      public static function getInstance()
      {
            if(null === self::$instance)
            {
       $acl = new Z_Acl();
            }

            return self::$instance;
      }
}


Класс оформлен, как синглтон.
Достаточно подключиться к БД и получить экземпляр класса.
Класс наследуется от Zend_Acl, поэтому, как его использовать дальше, смотрите в документации к Zend_Acl.

В итоге мы получили класс, у которого можно узнать в любом месте нашего приложения, какая роль, куда и имеет-ли доступ.
Остается только написать админку дляуправления созданными таблицами в БД и вуаля: гибкая система контроля доступа у вас на сайте.
cramen Сообщение 21/07/2010 07:11 Копия темы
Еще пара слов о переходе на Jabber или ICQ бот Сам, как приверженец свободных технологий, я давненько завел себе jabber аккаунт, но он долго пустовал, т.к. никто из асечного контактлиста не поддавался на уговоры перейти на jabber.
Тут, в свете недавних проблем с AOL и нескольких хабратопиков о XMPP клиентах и способах переманивания людей на них, меня постигла идея поставить на мой UIN бота. Пускай он умеет немного говорить и отсылать всех разговорчивых в нужном направлении.
Поискав на тему предмета разговора в интернете, ничего стоящего не удалось найти. Зато наткнулся на wip.asminog.com/news/wip1... с набором классов на PHP, реализующих минимальную функциональность ICQ протокола.
Недолго думая, скачал и попробовал на деле. Работает!!!
и спустя 30 минут написал следующее:


icqbot.php
#!/usr/bin/php
<?php
include('icq.php');

//подключение zendloader
require 'Zend/Loader.php';
Zend_Loader::registerAutoload();

//чтение конфига
$config = new Zend_Config_Xml('config.xml',NULL,true);

//подключение к БД
$db = Zend_Db::factory($config->dbadapter,$config->db ->toarray());
$db->query('SET CHARACTER SET "'.$config->dbcharset.'"');

//аськоклиент
$icq = new WebIcqLite();

log_write("ICQ Bot started");

//коннектимся
if (!$icq->connect($config->icq->login,$config->icq-> password))
{
log_write($icq->error);
exit();
}

log_write("Connected ok");

while($icq->is_connected())
{
//читаем входящее сообщение
$msg = $icq->read_message();
if($msg)
{
//список админских комманд
if ($msg['message']=="icqbotoff")
{
$icq->disconnect();
log_write("Exit by admin's command.");
exit();
}

log_write(" Message '".$msg['message']."' from ".$msg['from']);

//режем все лишние символы
$msg['message'] = str_replace(array('(',')','/',':','.',',','?','!' ,'@','#','$','%','^','&','*','-','_','=','+','~','`',';','|','\\','\'','"'),'',$msg['m essage']);

//ищем ответ
$ans = $db->select()->from('messages')->where('q LIKE ?',trim($msg ['message']))->where('LENGTH(a)>0')->order('RAND()')->q uery()->fetch();

if ($ans)
{
//точное совпадение
log_write(" Message '".$ans['a']."' sent to ".$msg['from']);
}
else
{
//нет совпадений. ищем полнотекстово.
$db->insert('messages',array('q'=>$msg['message'],'a'=>'',' from'=>$msg['from']));
$query = "SELECT *, MATCH q AGAINST ('".$msg['message']."') as relev FROM messages WHERE LENGTH(a)>0 ORDER BY relev DESC LIMIT 1";
$ans = $db->query($query)->fetch();
if ($ans['relev']>)
{
//нашли ответ
log_write("Message (fulltext search) '".$ans['a']."' sent to ".$msg['from']);
}
else
{
//нет совпадений. выдаем сообщение по умолчанию.
$ans = $db->select()->from('messages')->where('q LIKE ?','default')-> query()->fetch();
log_write("Message 'DEFAULT' sent to ".$msg['from']);
}
}
$icq->send_message($msg['from'], $ans['a']);//собстве нно отправка сообщения получателю
}
//спим секунду
flush();
sleep(1);
}

//уходим
log_write("Disconnected by unknown reason.");
$icq->disconnect();




//------------------------------------------- --------------------------------------------- //
//вспомогательные функции//

function log_write($str)
{
echo date('Y.m.d H.i.s',time())." ".$str."\n";
}



config.xml
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<debug>0</debug>
<db>
<host>localhost</host>
<username>root</username>
<password>dbpass</password>
<dbname>icqbot</dbname></db>
<dbcharset>CP1251</dbcharset>
<dbadapter>Pdo_Mysql</dbadapter>
<icq>
<login>UIN</login>
<password>PASSWORD</password>
</icq>


dump.sql
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL auto_increment,
`q` text NOT NULL,
`a` text NOT NULL,
`from` varchar(16) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `q` (`q`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=43 ;

INSERT INTO `messages` (`id`, `q`, `a`, `from`) VALUES
(1, 'default', 'В данный момент вы говорите с роботом.Если вы хотите говорить с моим хозяином, вам необходимо зарегистрироваться на одном из Jabber серверов, т.к. в ICQ он больше не появится.Чтобы узнать подробности о Jabber-е, введите 1.Чтобы узнать Jabber адрес хозяина, напишите, сколько будет 2плюспять.Чтобы узнать почтовый адрес хозяина, введите цифры от 1 до 7 без пробелов.', ''),
(2, '1234567', 'My@mail.ri', ''),
(3, '7', 'My@jabber.ru', ''),
(4, '1', 'Один из популярных Jabber серверов – jabber.ruwww.jabber.ru/node/247 – это адрес страницы с инструкцией по регистрации подключению к нему.Чтобы узнать Jabber адрес хозяина, напишите, сколько будет дваплюс5.', ''),
(5, 'привет', 'Привет )', ''),
(6, 'как дела', 'Нормально )', '');

И не забыть положить в папочку с ботом ZendFramework

Не буду что-то комментировать, т.к. все достаточно тривиально.
Отмечу лишь то, что не ставил задачу сделать что-то серьезное, а только отсылалку по адресу (хотя уже набрал достаточно диалогов и бот с некоторыми знакомыми уже говорил цепочками сообщений в 5-10 штук без вываливания дефолтного сообщения). Бот не работает с сообщениями в формате RTF, но в классе реализована эта возможность(можно доделать). Можно было конечно прикрутить и беседу с отдельными UIN в отдельные потоки. Но это дело другое. Главное идея )
Сие творение уже 4 дня в полете. Людей по 1-2 человека в день в jabber контактлисте прибавляется.
Вот такое вот чудо получилось.
0

©2008 edogs egods
Выразить восторг, поругаться
или предложить что-нибудь можно на форуме
Для обсуждения этого сервиса так же есть темы на фрилансе по
поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал"