Главная » Полезные статьи » Язык PHP » Twitter + PHP + Codeigniter: пишем twitter статус на PHP
Распечатать статью

Twitter + PHP + Codeigniter: пишем twitter статус на PHP

Twitter + PHP +codeigniterВсем привет! В этой статье мы будем обновлять наш twitter статус с помощью PHP (Фреймворк Codeigniter) и сервиса “Twitter API”. Рекомендую вам следовать шаг за шагом, чтобы не запутаться и во всем разобраться. Нужно сказать, что при написании статьи использовалась программа: CodeIgniter PHP Framework 1.7.1. Что ж поехали!

Настройка CodeIgniter

Для начала, нам необходимо установить некоторые настройки умолчания в разделе настроек codeigniter. Откройте файл system/application/config/autoload.php и измените следующую строку:

$autoload[‘libraries’] = array(»);

на:

$autoload[‘libraries’] = array(‘database’);

С помощью этого параметра мы будем осуществлять автозагрузку базы данных. Далее откройте файл database.php и измените параметры соединения с базой данных на ваши: имя базы данных, пользователь, пароль. В качестве названия мы будем использовать twitter_api. Теперь откройте файл config.php и измените параметр base_url на путь к вашей папке с codeigniter. Моя папка называется twitter_api. Это моя системная папка. Мой параметр выглядит таким образом:

$config[‘base_url’] = «http://localhost/ci/twitter_api»;

Заполнение базы данных

Так как мы будем работать с базой данных, нам необходимо иметь некоторые данные в базе, чтобы иметь возможность их использовать. Откройте phpmyadmin или вашу систему управления базами данных и создайте новую базу с именем ci_twitter_api. Отлично, теперь мы создадим новую таблицу, используя следующий mysql запрос. Перед выполнением запроса, отредактируйте в нем ваш ПАРОЛЬ и ИМЯ ПОЛЬЗОВАТЕЛЯ для доступа к аккаунту twitter.

CREATE TABLE IF NOT EXISTS `accounts` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `username` varchar(120) NOT NULL,
     `password` varchar(32) NOT NULL,
     `active` int(11) NOT NULL,
     `last_message` varchar(140) NOT NULL,
     PRIMARY KEY (`id`)
   ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
   INSERT INTO `accounts` (`id`, `username`, `password`, `active`, `last_message`) VALUES
   (1, <b>YOUR USERNAME</b><b>YOUR PASSWORD</b>, 1, ‘No message sent.’);

twitter + php: sql запрос

Нажмите кнопку подтверждения и ваш запрос будет выполнен. Теперь ваша структура параметров доступа к twitter аккаунту будет выглядеть таким образом:

twitter + php: sql row

Создание модели

Для этого перейдите в папку system/application/models и создайте новый файл с именем twitter_model.php.

Для начала, мы объявим две глобальные переменные в самом верху.

var $accounts_table = ‘accounts’;
var $update_url = ‘http://twitter.com/statuses/update.xml’;

$accounts_table – содержит имя таблицы, которую мы только что создали. $update_url – это адрес, который мы будем использовать для изменения нашего статуса. Если twitter поменяет этот адрес, вам необходимо будет также поменять его в этой переменной, так как этот адрес будет основой нашего приложения.

Далее, мы создадим наш первый метод, который просто возвратит активный аккаунт пользователя, который хранится в бд. Для определения активности мы будем использовать строку active и значение 1. Мы добавили этот параметр, потому что некоторые люди имеют несколько twitter аккаунтов. Ниже код метода:

class Twitter_model extends Model {
   // get the active twitter account from the database, by row active = 1  
   function getActiveAccount()
   {
       return $this->db->get_where($this->accounts_table, array(‘active’ => ‘1’))->row();
   }

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

Далее, мы создадим наш главный метод, который будем изменять twitter статус. Он будет использовать наш пароль, имя пользователя, и конечно же сообщение которое мы будем отправлять для обновления статуса. Кроме этого, он будет определять HTTP_CODE, который будет возвращен от twitter и будет сообщать нам о результате выполнения обновления статуса.

// update twitter status and last message on success  
function update_status($username$password$message)
{
    $ch = curl_init($this->update_url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, ‘status=’.urlencode($message));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ‘:’ . $password);
    curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // if we were successfull we need to update our last_message  
    if ($httpcode == ‘200’)
    {
        $this->db->where(‘active’‘1’);
        $this->db->update($this->accounts_table, array(‘last_message’ => $message));
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

На первый взгляд, код может показаться сложным, но это не так, он прост для понимания. Наиболее важная часть метода, та где мы используем cURL для связи с Twitter. Это отличная библиотека, для того, чтобы отправлять и получать данные из twitter.

Теперь рассмотрим подробнее, curl_init инициализирует сессию и принимает URL, как параметр – в нашем случае это url для обновления twitter статуса, который предоставляется сервисом Twitter API.

С помощью curl_setopt, мы устанавливаем некоторые необходимые опции для передачи данных.

CURLOPT_POST – мы устанавливаем значение «1», для того чтобы HTTP запрос, был аналогичен запросу посылаемому из HTML формы.

CURLOPT_POSTFIELDS – этот параметр содержит данные, которые нам необходимо отправить. В нашем случае это ‘status=’ и наше сообщение. Также мы должны использовать функцию urlencode, для того, чтобы иметь возможность использовать спецсимволы в нашем сообщении, такие как ‘%&/” .

CURLOPT_RETURNTRANSFER – этот параметр должен быть равен «1», это важно, потому что, мы будем получать ответ в виде строки, которая будет содержать информацию об успешности обновления twitter статуса.

CURLOPT_USERPWD – этот параметр предназначен для аутентификации. Он просто содержит наш twitter пароль и имя пользователя в формате: username:password.

После установки CURLOPT параметров, мы выполняем отправку с помощью функции curl_exec()  и получаем обратный ответ с помощью curl_getinfo(CURLINFO_HTTP_CODE). Как вы уже поняли, HTTP_CODE сообщает нам об успешности выполнения запроса. Если код равен «200», это значит, что все работает и статус обновлен. В нашем методе, при получении ответа 200, мы обновляем запись в базе данных и возвращаем TRUE, в противном случае возвращаем FALSE.

В завершения нашей модели, мы создадим еще один, последний, метод. Он будет получать наше последнее сообщение из базы данных, это необходимо для вывода его в виде (view).

// get the last_message, by row active = 1  
function getLastMessage()
{
    $this->db->select(‘last_message’);
    $last_message =  $this->db->get_where($this->accounts_table, array(‘active’ => ‘1’))->row()->last_message;
    return htmlspecialchars($last_message);
}

Этот метод достаточно простой. Он выбирает из БД строку last_message, активного аккаунта. И возвращает ее в конвертированном виде с помощью htmlspecialchars, для замены некоторых символов HTML сущностями. Вот мы и закончили писать модель для обновления twitter статуса с помощью PHP. Теперь приступим к следующему шагу.

Создание контроллера

Сейчас перейдите в папку system/application/controllers и создайте новый файл с именем twitter.php.

Давайте добавим в него несколько строк:

class Twitter extends Controller {
function Twitter()
{
    parent::Controller();
    $this->load->model(‘twitter_model’);
}

Это простой конструктор, который будет загружать нашу модель (twitter_model). Теперь, перейдем к созданию index() метода:

function index()
{
    $data[‘heading’] = ‘Hi, send a tweet!’;
    $data[‘last_message’] = $this->twitter_model->getLastMessage();
    $data[‘active_user’] = $this->twitter_model->getActiveAccount()->username;
    $this->load->view(‘header’$data);
    $this->load->view(‘index’);
    $this->load->view(‘footer’);
}

В этом методе, мы передаем простой текст, имя пользователя активного twitter аккаунта и последнее его сообщение в массиве $data.

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

Теперь, закончим создание контроллера, создадим метод update:

// updating our status on twitter ( new message )  
function update()
{
    if ($this->input->post(‘submit’))
    {
        $this->load->library(‘form_validation’);
        $this->form_validation->set_error_delimiters(<div class=»error»></div>);
        $this->form_validation->set_rules(‘message’‘Message’‘trim|required|min_length[5]|max_length[140]’);
        if ($this->form_validation->run() == FALSE)
        {
            $this->index();
        }
        else
        {
            $message = $this->input->post(‘message’);
            // get useraccount data  
            $account = $this->twitter_model->getActiveAccount();
            $username = $account->username;
            $password = $account->password;
            // send a tweet  
            if ($this->twitter_model->update_status($username$password$message))
            {
                redirect(‘twitter’);
            }
            else
            {
                $data[‘error’] = ‘There was an error while updating your status’;
                $this->load->view(‘header’$data);
                $this->load->view(‘error’);
                $this->load->view(‘footer’);
            }
        }
    }

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

if ($this->input->post(‘submit’))
    {
        $this->load->library(‘form_validation’);
        $this->form_validation->set_error_delimiters(‘
<div class=«error»>‘, ‘</div>
‘);
        $this->form_validation->set_rules(‘message’‘Message’‘trim|required|min_length[5]|max_length[140]’);
        if ($this->form_validation->run() == FALSE)
        {
            $this->index();
        }

С помощью $this->input->post(‘submit’), определяем факт подачи запроса из формы. Далее загружаем библиотеку валидации форм (form_validation). Устанавливаем ограничения на сообщение от 5 до 140 символов, удаляем пробелы с помощью функции trim, также устанавливаем поля required, чтобы исключить возможность получения пустого сообщения. Функция set_rules, имеет два параметра: первый – это имя нашего поля сообщения указанного в главном виде, второй – это имя пользователя, которое вставляется в сообщение ошибки (будет понятнее, когда мы создадим вид).

После установки параметров валидации, запускаем валидацию $this->form_validation->run(), которая возвращает истину или ложь. В случае FALSE запускаем наш index() метод. Он будет отображать сообщение об ошибке, когда мы создадим виды.

Рассмотрим следующий фрагмент кода:

else
   {
       $message = $this->input->post(‘message’);
       // get useraccount data  
       $account = $this->twitter_model->getActiveAccount();
       $username = $account->username;
       $password = $account->password;
       // send a tweet  
       if ($this->twitter_model->update_status($username$password$message))
       {
           redirect(‘twitter’);
       }
       else
       {
           $data[‘error’] = ‘There was an error while updating your status’;
           $this->load->view(‘header’$data);
           $this->load->view(‘error’);
           $this->load->view(‘footer’);
       }
   }

Благодаря нашей модели, мы с легкостью получаем имя пользователя и пароль twitter аккаунта, активного пользователя. Используя $this->twitter_model->update_status(), мы собственно отправляем новый статус, как помните, в этот метод необходимо передать имя пользователя, пароль и сообщение. Если статус обновлен успешно, мы перенаправляем методом redirect(), используя url helper. Если, что то не так, мы выводим ошибку и загружаем виды, которые мы создадим в следующем шаге.

Создаем виды

Для полноценной работы нашего PHP приложения, нам необходимо создать виды, для этого перейдите в папку system/application/views и создайте следующие файлы:

  1. header.php
  2. footer.php
  3. index.php
  4. error.php

header.php – содержит основную информацию и метатеги, подключает css стиль, и открывает главные див блоки:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=«Content-Type» content=«text/html; charset=utf-8″ />
<link media=«screen» rel=«Stylesheet» type=«text/css» href=«<?php echo base_url(); ?>css/style.css» />
<title>Using the Twitter API with CodeIgniter</title>
</head>
<body>
<div id=«wrapper»>
<div id=«main»>

Мы используем функцию base_url(), для указания пути к нашему css файлу, который мы создадим в следующем шаге.

footer.php – просто содержит все закрывающие теги:

</div><!—end main—>
   </div><!—end wrapper—>
   </body>
   </html>

index.php – это страница, на которой будут происходить главные действия приложения:

<h3>
<?php echo $heading?>
   <span>
    ( account: <?php echo anchor(‘http://twitter.com/’ . $active_user$active_user); ?> )  
   </span>
   </h3>
   <?php echo form_error(‘message’); ?>
   <?php echo form_open(‘twitter/update’array(‘id’ => ‘update_form’)); ?>
   <?php echo form_input(array(‘name’ => ‘message’‘maxlength’ => ‘140’)); ?>
   <?php echo form_submit(‘submit’‘update’); ?>
   <?php echo form_close(); ?>
   <div id=«last_message»>
       <fieldset>
           <legend>Last <span>sent by <b><?php echo $active_user ?></b></span></legend>
           <p><?php echo $last_message?></p>
       </fieldset>
   </div><!—end last_message—>

Все переменные используемые в этом виде, передаются через index() метод нашего контроллера. В дополнение, мы используем form helper для создания html форм. Помните, ранее упоминалось, что сообщение об ошибке, будет выводится в этом виде. form_error(‘message’) – будет осуществлять это. Ниже форм, мы будем выводить последнее сообщение, которое отправил активный пользователь.

error.php – будет использоваться, как отдельный файл ошибки, для вывода сообщения в случае невозможности обновления статуса в twitter.

<h3><?php echo $error?></h3>
    <?php echo anchor(‘twitter’‘Go back and try again’); ?>

Создание CSS файла

Для того, чтобы сделать наше приложение более красивым, мы добавим css код стиля. Зайдите в папку system/ и создайте папку css. В этой папке создайте файл style.css и вставьте в него следующий код:

/* Reset CSS */
html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, address, code, img,
small, strong, dl, dt, dd, ol, ul, li,
fieldset, form, label {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-size: 100%;
    vertical-align: baselinebaseline;
    background: transparent;
}
body {
    line-height: 1.5;
    font-family:Arial, sans-serif;
    margin:0;
}
ol, ul, li {
    list-style: none;
    list-style-type:none;
}
.clear { clear:both; }
/* DEFAULTS */
h3 {
    color:#35CCFF;
    font-size:20px;
}
/* CUSTOM */
#wrapper {
    width:900px;
    margin:0 auto;
}
/* main */
#main {
    margin-top:50px;
}
#main h3 span {
    font-size:14px;
    color:#cccccc;
}
#main h3 a {
    color:#cccccc;
}
/* form */
#update_form input {
    width:888px;
    padding:5px;
    border:1px solid #d3d3d3;
    display:block;
}
#update_form input[type=«submit»] {
    width:auto;
    margin-top:10px;
    background-color:#000000;;
    border:none;
    color:white;
    font-size:12px;
    font-weight:bold;
    cursor:pointer;
    padding:3px;
}
div.error {
    display:block;
    background-color:#FB8A8A;
    border:1px solid #FF3B3B;
    padding:5px;
    color:#ffffff;
    width:50%;
    margin-bottom:30px;
    font-weight:bold;
    margin:0 auto 10px auto;
    text-align:center;
}
/* last message */
#last_message fieldset {
    border:1px dashed #d3d3d3;
    padding:5px;
    margin-top:30px;
}
#last_message fieldset p {
    padding:5px;
    font-size:18px;
    font-weight:normal;
}
#last_message legend span {
    font-size:12px;
}

Код кроссбраузерный и в этом его преимущество.

Источник:  sitear.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи