Войти Регистрация

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;  
}

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

КАРТИНКА

Проверка на работоспособность

Мы только что, создали отличное приложения для обновления twitter статуса с помощью PHP, CodeIgniter и Twitter API. Теперь остается только тестировать и радоваться проделанной работе, что мы сейчас и сделаем:

Главный вид нашего приложения, давайте напишем что-нибудь!

Общий вид twitter PHP приложения

Вводим наш статус:

twitter статус

После обновления выглядит следующим образом:

twitter php send

Давайте проверим, действительно ли работает это? Зайдем в наш Twitter.

Аккаунт sitear.ru в twitter

В заключение

Очень надеюсь, что вы поняли, как создать приложение и выучили что-то новое. Если, все еще остались некоторые недопонимания по поводу twitter и php, или вы осуществляете это другим способом, дайте знать (в комментариях ниже). Спасибо за внимание!

Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim c?mo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso D?nde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en l?nea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price