Привет, в этом уроке мы обновим наш статус в Твиттере через «Twitter API» с помощью CodeIgniter . Я рекомендую следовать шаг за шагом, а не замазывать учебник. Давайте копаться в!
Учебное пособие
- Программа : CodeIgniter PHP Framework
- Версия : 1.7.1
- Сложность: Продвинутый
- Расчетное время завершения: 30 минут
1. Настройка CodeIgniter
Сначала нам нужно отредактировать некоторые настройки по умолчанию в разделе конфигурации CI.
Откройте system / application / config / autoload.php и отредактируйте следующее из:
1
|
$autoload[‘libraries’] = array(»);
|
чтобы:
1
|
$autoload[‘libraries’] = array(‘database’);
|
Это автоматически загрузит базу данных. Затем откройте файл database.php и измените настройку соединения с базой данных — имя
ваша база данных, пользователь и пароль. В качестве имени мы будем использовать ci_twitter_api .
Теперь откройте config.php и измените base_url на вашу папку CI. Моя папка называется twitter_api .
В этой папке находится моя системная папка. Так что мой base_url будет:
1
|
$config[‘base_url’] = «http://localhost/ci/twitter_api»;
|
2. Заполнение базы данных
Поскольку мы собираемся работать с базой данных, нам понадобятся некоторые данные, с которыми можно поиграть. Откройте phpmyadmin или ваш
любимый инструмент управления базами данных и создать новую базу данных с именем ci_twitter_api . Теперь мы создадим
Новая таблица, используя следующий запрос SQL, но внимание , используйте ваши имя пользователя и пароль в твиттере.
01
02
03
04
05
06
07
08
09
10
11
|
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=latin1 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.’);
|
Нажмите кнопку OK с правой стороны, и запрос должен быть обработан. Теперь ваша структура для таблицы
аккаунты должны выглядеть примерно так, как на картинке ниже.
3. Построение модели
Перейдите в system / application / models и создайте новый файл с именем twitter_model.php .
Сначала мы объявим две глобальные переменные вверху.
1
2
|
var $accounts_table = ‘accounts’;
var $update_url = ‘http://twitter.com/statuses/update.xml’;
|
Таким образом, $ accounts_table относится к таблице, которую мы создали ранее, а $ update_url — это URL, который мы будем использовать.
обновить наш статус. Если Twitter изменяет URL своего обновления, вам нужно отредактировать его только один раз, а не каждый раз, когда он используется в коде.
Теперь мы создадим наш первый метод, который будет просто возвращать активную учетную запись пользователя, хранящуюся в базе данных,
на основе активной строки и значения 1 . Я добавил это, потому что у некоторых людей есть два или более Twitter
Счета.
1
2
3
4
5
6
7
|
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();
}
|
Мы просто используем активные записи
получить активную учетную запись и вернуть затронутую строку.
Следующим шагом мы собираемся построить основной метод, метод обновления . Это будет использовать наш
имя пользователя, пароль и, конечно, сообщение, которое мы хотим отправить, и обновить наш статус в Twitter. Помимо этого,
он будет интерпретировать HTTP_CODE, который возвращается Twitter, чтобы сообщить нам, был ли обновлен статус
успешно или нет.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// 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. Это действительно здорово
библиотека, которая позволяет отправлять и получать данные HTTP POST из Twitter.
Теперь curl_init инициализирует сеанс cURL и принимает URL-адрес в качестве параметра — в нашем случае обновление статуса
URL из Twitter API .
С помощью curl_setopt мы устанавливаем некоторые необходимые опции для передачи cURL.
- CURLOPT_POST : мы устанавливаем это в ‘1’, чтобы использовать HTTP POST, который аналогичен используемому в формах HTML.
- CURLOPT_POSTFIELDS : этот параметр поддерживает данные POST, которые мы хотим отправить. В нашем случае
‘status =’ и наше сообщение . Нам нужно urlencode сообщения, чтобы иметь возможность использовать специальные
такие символы, как «% & /» . - CURLOPT_RETURNTRANSFER : Для нас важно установить это значение в «1», потому что оно вернет передачу
как строка Эта строка позже сообщит нам, если статус был обновлен успешно или нет. - CURLOPT_USERPWD : эта опция для аутентификации. Это просто берет наш твиттер имя пользователя и пароль
в формате имя пользователя: пароль .
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
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_exec () и извлекаем возвращенный HTTP_CODE
используя curl_getinfo (CURLINFO_HTTP_CODE) . Этот HTTP_CODE сообщает нам, было ли обновление статуса завершено или нет.
Код «200» означает, что это сработало, и обновление было сделано. Вы можете просмотреть полный список кодов состояния HTTP
здесь
Если мы получаем «200», возвращаемых Twitter, мы отправляем запрос в нашу базу данных, который обновляет нашу строку last_message, и, наконец,
мы возвращаем ИСТИНА . Если 200 не возвращается, мы просто возвращаем FALSE .
Чтобы закончить нашу twitter_model, мы создадим последний метод, который получит последнее отправленное нами сообщение . Нам нужно
этот метод, потому что мы будем отображать наше последнее сообщение в представлении.
1
2
3
4
5
6
7
8
|
// 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_model.php теперь выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
class Twitter_model extends Model {
var $accounts_table = ‘accounts’;
var $update_url = ‘http://twitter.com/statuses/update.xml’;
// 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();
}
// 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;
}
}
// 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);
}
}
|
4. Построение контроллера
Теперь перейдите в system / application / controllers и создайте новый файл с именем twitter.php .
Давайте добавим несколько строк:
1
2
3
4
5
6
7
8
|
class Twitter extends Controller {
function Twitter()
{
parent::Controller();
$this->load->model(‘twitter_model’);
}
|
Это простой конструктор CI, который загружает наш twitter_model . Так что это будет доступно нам в течение всего контроллера.
Теперь приходит метод index () .
01
02
03
04
05
06
07
08
09
10
|
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’);
}
|
Мы передаем информацию, такую как некоторый текст, наше последнее сообщение и имя пользователя активного пользователя в массив $ data .
Благодаря нашему twitter_model это удобный способ получить последнее сообщение и активное имя пользователя. По крайней мере, мы загружаем некоторые
представления, которые мы создадим после завершения нашего контроллера. Давайте построим метод обновления .
1
|
// updating our status on twitter ( new message ) function update() { if ($this->input->post(‘submit’)) { $this->load->library(‘form_validation’);
|
Это может снова сбить с толку, но мы пройдем его по частям.
01
02
03
04
05
06
07
08
09
10
|
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 символов. Кроме того, мы обрезаем пробел с помощью
установка поля как требуется, потому что нам не нужно пустое сообщение. Функция set_rules принимает в качестве первого параметра
имя поля from, наше сообщение case (которое скоро будет создано в представлении) и как второй параметр человек
имя для этого поля, которое будет вставлено в сообщение об ошибке (будет сделано в файле представления).
Мы вызываем $ this-> form_validation-> run () , который может возвращать TRUE или FALSE . Если установленное нами правило было нарушено
вернет FALSE и мы просто вызовем наш метод index () . В файлах представлений, вызываемых методом index (),
Сообщения об ошибках будут отображаться после того, как мы создали наши представления.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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_model , снова очень легко получить имя пользователя и пароль текущего активного пользователя.
Мы могли бы также сделать $ username = $ this-> twitter_model-> getActiveAccount () -> username, но я думаю, что для этого урока это
немного легче понять.
Используя $ this-> twitter_model-> update_status (), мы вызываем метод, который будет «общаться» с Twitter. Это говорит Твиттер наш
имя пользователя , пароль и наше сообщение. Если статус был успешно обновлен, мы перенаправляем, используя redirect () из помощника url .
Если что-то не так, мы устанавливаем сообщение об ошибке и загружаем несколько файлов просмотра, которые будут созданы на следующем шаге :).
Контроллер теперь выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
class Twitter extends Controller {
function Twitter()
{
parent::Controller();
$this->load->model(‘twitter_model’);
}
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’);
}
// 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’);
}
}
}
else
{
redirect(‘twitter’);
}
}
}
|
5. Создание видов
Теперь мы создадим наши файлы просмотра. Перейдите в system / application / views и создайте следующие файлы:
- header.php
- footer.php
- index.php
- error.php
Header.php будет содержать основную мета-информацию html, нашу CSS-ссылку и начальные теги наших основных элементов div,
#wrapper и #main .
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<!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 просто содержит закрывающие теги.
1
2
3
4
5
6
|
</div><!—end main—>
</div><!—end wrapper—>
</body>
</html>
|
Index.php — это место, где проходит вечеринка.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<h3>
<?php echo $heading;
<span>
( account: <?php echo anchor(‘http://twitter.com/’ . $active_user, $active_user); ?> )
</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>
<p><?php echo $last_message;
</fieldset>
</div><!—end last_message—>
|
Все используемые здесь переменные передаются через метод index () из нашего контроллера. В дополнение к этому,
мы используем помощник формы для создания простой формы HTML. Помните, я говорил вам об обработке ошибок для
поле сообщения будет сделано здесь; form_error (‘message’) совершает эту магию.
Ниже формы мы показываем последнее сообщение, отправленное аккаунтом активного пользователя.
Наконец, файл error.php будет использоваться для пользовательского файла ошибок в случае, если обновление статуса было неудачным.
1
2
3
|
<h3><?php echo $error;
<?php echo anchor(‘twitter’, ‘Go back and try again’);
|
6. Добавление CSS
Чтобы сделать его немного красивее, мы добавим немного CSS. Перейти в систему /
и создайте папку css . Внутри этой папки создайте файл с именем style.css и вставьте
следующий код.
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
|
/* 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: baseline;
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;
}
|
Я использую сброс CSS Эрика Мейерса для нейтрализации просмотра во всех браузерах. Ваше приложение должно теперь как изображение ниже.
Большой финал
Давайте проверим наше свежее приложение. Мы бросим сообщение и нажмем кнопку обновления !
После того, как обновление было сделано:
Давайте посмотрим на Twitter 🙂
если мы нарушаем правило проверки формы, пытаясь отправить пустое сообщение:
Вывод
Я действительно надеюсь, что немного помог вам с изучением CodeIgniter и как использовать отличный API Twitter! Вы сделали бы что-нибудь по-другому? Если так, дайте нам знать!
- Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для ежедневных новостей и статей о веб-разработке.