Заходи
Гость

Хостинг

Статистика
Яндекс.Метрика Счетчик PR-CY.Rank
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Ccылки

Свежак

Главная » 2013 » Март » 31 » Собственный XML / JSON / HTML API с PHP
15:02
Собственный XML / JSON / HTML API с PHP

Собственный XML / JSON / HTML API с PHP


Сегодня у меня есть новая статья PHP для вас. Я расскажу вам о разработке собственной службы API для ваших проектов. Как пример - давайте представим, что у нас есть видео-сайт, к которому мы собираемся написать API интерфейс. Мы научим наш API для работы с POST / GET запросами, и выдачу результата в любом из следующих форматов: XML / JSON / HTML.


СМОТРЕТЬ ДЕМО                     СКАЧАТЬ ИСХОДНИК


Шаг 1. SQL

Позволяет добавлять новые таблицы для базы данных вести учет о тесте видео:

01           CREATE TABLE IF NOT EXISTS `s189_videos` (

02             `id` int(10) unsigned NOT NULL auto_increment,

03             `title` varchar(255) default '',

04             `author` varchar(255) default '',

05             `thumb` varchar(255) default '',

06             `views` int(10) NOT NULL,

07             PRIMARY KEY  (`id`)

08           ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

09          

10           INSERT INTO `s189_videos` (`title`, `author`, `thumb`, `views`) VALUES

11           ('SURPRISE? - Ray William Johnson Video', 'RayWilliamJohnson','http://i1.ytimg.com/vi/4EwSAzHj8VM/default.jpg', 10000),

12           ('Sophia Grace and Rosie Hit ...', 'TheEllenShow','http://i4.ytimg.com/vi/KUWpd91UBrA/default.jpg', 20000),

13           ('The Thanksgiving Massacre!', 'FPSRussia', 'http://i2.ytimg.com/vi/Mgd0Hsgl8gU/default.jpg', 30000),

14           ('WE''RE MARRIED!!!!!!', 'CTFxC', 'http://i2.ytimg.com/vi/q1tsmlKXqK8/default.jpg', 40000),

15           ('Guinea Pig Boat IN OUR MAIL?!', 'IanH', 'http://i4.ytimg.com/vi/3t1YysIt598/default.jpg', 50000),

16           ('SCARED PUPPY!!!', 'Tobuscus', 'http://i1.ytimg.com/vi/8RcYkGr_IIw/default.jpg', 60000),

17           ('Review: Jawbone Up', 'SoldierKnowsBest', 'http://i4.ytimg.com/vi/WraMbywRR9M/default.jpg', 70000);

 

Это случайные записи из YouTube.

Шаг 2. PHP

Теперь, давайте представим обзор нашей тестовой страницы:

index.php

01           <?php

02          

03           // Test - using POST for add video record

04           if (isset($_GET['action']) && $_GET['action'] == 'curl') {

05          

06               $sUrl = "http://your_host_url/service.php";

07               $sData = 'title=TestVideo&action=add_video&type=xml';

08          

09               $ch = curl_init();

10               curl_setopt($ch, CURLOPT_URL, $sUrl);

11               curl_setopt($ch, CURLOPT_POSTFIELDS, $sData);

12               curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

13               curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

14               $vRes = curl_exec($ch);

15               curl_close($ch);

16          

17               header('Content-Type: text/xml');

18               echo $vRes;

19               exit;

20           }

21          

22           ?>

23           <!DOCTYPE html>

24           <html lang="en" >

25               <head>

26                   <meta charset="utf-8" />

27                   <title>Own XML/JSON/HTML API with PHP | Script Tutorials</title>

28          

29                   <link href="css/main.css" rel="stylesheet" type="text/css" />

30               </head>

31               <body>

32                   <header>

33                       <h2>Own XML/JSON/HTML API with PHP</h2>

34                       <a href="http://www.script-tutorials.com/own-xmljsonhtml-api-with-php/"class="stuts">Back to original tutorial on <span>Script Tutorials</span></a>

35                   </header>

36                   <div class="container">

37          

38                       <div class="contr">

39                           <form action="service.php" target="results">

40                               <label>Action: </label>

41                               <select name="action">

42                                   <option value="last_videos">Last videos</option>

43                                   <option value="top_videos">Top videos</option>

44                               </select>

45                               <label>Limit: </label>

46                               <select name="limit">

47                                   <option value="1">1</option>

48                                   <option value="2">2</option>

49                                   <option value="3">3</option>

50                                   <option value="4" selected>4</option>

51                                   <option value="5">5</option>

52                                   <option value="6">6</option>

53                                   <option value="7">7</option>

54                               </select>

55                               <label>Method: </label>

56                               <select name="type">

57                                   <option value="xml">XML</option>

58                                   <option value="json">JSON</option>

59                                   <option value="html">HTML</option>

60                               </select>

61                               <input type="submit" />

62                           </form>

63                           <a href="index.php?action=curl">Add video (CURL)</a>

64                       </div>

65          

66                       <div>Results:</div>

67                       <iframe name="results" style="width:600px;height:400px">

68                       </iframe>

69                   </div>

70               </body>

71           </html>

 

 

Как вы можете видеть - большая часть кода находится в HTML коде. Следующий файл - файл нашего сервиса (услуги индексного файла)

service.php

01           <?php

02          

03           require_once('classes/CMySQL.php'); // including service class to work with database

04           require_once('classes/CServices.php'); // including service class to work with database

05           $oServices = new CServices();

06          

07           // set method

08           $oServices->setMethod($_REQUEST['type']);

09          

10           // set possible limit

11           if (isset($_GET['limit']) && (int)$_GET['limit']) {

12               $oServices->setLimit((int)$_GET['limit']);

13           }

14          

15           // process actions

16           switch ($_REQUEST['action']) {

17               case 'last_videos':

18                   $oServices->getLastVideos();

19                   break;

20               case 'top_videos':

21                   $oServices->setOrder('top');

22                   $oServices->getLastVideos();

23                   break;

24               case 'add_video':

25                   $oServices->addVideo($_POST['title']);

26                   break;

27           }

Довольно простой файл. Он делает обработку всех запросов с использованием класса CServices (основной класс услуг). Теперь мы разовьём этот класс, который будет предоставлять все вспомогательные функции, которые нам нужны.

Классы / CServices.php

001         <?php

002        

003         class CServices {

004        

005             private $sMethod;

006             private $iLimit;

007             private $sOrder;

008        

009             // constructor

010             public function CServices() {

011                 $this->sMethod = 'xml';

012                 $this->iLimit = 5;

013                 $this->sOrder = 'last';

014             }

015        

016             // set method

017             public function setMethod($s) {

018                 $this->sMethod = $s;

019             }

020        

021             // set limit

022             public function setLimit($i) {

023                 $this->iLimit = ($i > 0 && $i < 10) ? $i : $this->iLimit;

024             }

025        

026             // set order

027             public function setOrder($s) {

028                 $this->sOrder = $s;

029             }

030        

031             // return list of videos

032             public function getLastVideos() {

033                 // define order field

034                 $sOrderField = ($this->sOrder == 'last') ? 'title' : 'views';

035        

036                 // obtain data from database

037                 $aData = $GLOBALS['MySQL']->getAll("SELECT * FROM `s189_videos` ORDER BY `{$sOrderField}` DESC LIMIT {$this->iLimit}");

038        

039                 // output in necessary format

040                 switch ($this->sMethod) {

041                     case 'json': // gen JSON result

042                         // you can uncomment it for Live version

043                         // header('Content-Type: text/xml; charset=utf-8');

044                         if (count($aData)) {

045                             echo json_encode(array('data' => $aData));

046                         } else {

047                             echo json_encode(array('data' => 'Nothing found'));

048                         }

049                         break;

050                     case 'xml': // gen XML result

051                         $sCode = '';

052                         if (count($aData)) {

053                             foreach ($aData as $i => $aRecords) {

054                                 $sCode .= <<<EOF

055         <unit>

056             <id>{$aRecords['id']}</id>

057             <title>{$aRecords['title']}</title>

058             <author>{$aRecords['author']}</author>

059             <image>{$aRecords['thumb']}</image>

060             <views>{$aRecords['views']}</views>

061         </unit>

062         EOF;

063                             }

064                         }

065        

066                         header('Content-Type: text/xml; charset=utf-8');

067                         echo <<<EOF

068         <?xml version="1.0" encoding="utf-8"?>

069         <videos>

070         {$sCode}

071         </videos>

072         EOF;

073                         break;

074                     case 'html': // gen HTML result

075                         $sCode = '';

076                         if (count($aData)) {

077                             foreach ($aData as $i => $aRecords) {

078                                 $sCode .= <<<EOF

079         <div>

080             <img src="{$aRecords['thumb']}" style="float:left;margin-right:10px;" />

081             <p>Title: {$aRecords['title']}</p>

082             <p>Author: {$aRecords['author']}</p>

083             <p>Views: {$aRecords['views']}</p>

084         </div>

085         EOF;

086                             }

087                         } else {

088                             $sCode = '<div>Nothing found</div>';

089                         }

090        

091                         header('Content-Type: text/html; charset=utf-8');

092                         echo $sCode;

093                         break;

094                 }

095             }

096        

097             public function addVideo($sTitle) {

098                 // just simulation

099                 $aData = array('res' => 'Video "' . $sTitle . '" added successfully');

100        

101                 switch ($this->sMethod) {

102                     case 'json':

103                         header('Content-Type: text/xml; charset=utf-8');

104                         echo json_encode($aData);

105                         break;

106                     case 'xml':

107                         header('Content-Type: text/xml; charset=utf-8');

108                         echo <<<EOF

109         <?xml version="1.0" encoding="utf-8"?>

110         <res>

111         {$aData['res']}

112         </res>

113         EOF;

114                         break;

115                     case 'html':

116                         header('Content-Type: text/html; charset=utf-8');

117                         echo '<div>' . $aData['res'] . '</div>';

118                         break;

119                 }

120             }

121         }

 

В этом классе я добавил все сервисные функции. Одна из функций - 'getLastVideos "сделана для получения списков видео. Вторая "addVideo '- для добавления новых видео. Конечно - я не добавлял видео на самом деле - просто моделировал процесс. В результате функция - Я генерировал результат в требуемом формате.

Классы / CMySQL.php

Это обычный класс сервис для работы с базой данных. Доступные в исходнике.


СМОТРЕТЬ ДЕМО                              СКАЧАТЬ ИСХОДНИК


Источник урока

Категория: PHP | Просмотров: 1048 | Добавил: Iron | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статьи
[Прогараммирование]
Как работает CSS?
[Прогараммирование]
ЛЕКЦИЯ. Язык Pascal
[Прогараммирование]
Статический анализ: ошибки в медиаплеере и безглючная аська
[Операционные системы]
Особенности применения технологий Lotus Domino и Notes в современных информационных системах
[Устронение ошибок систем]
Устранение неполадок при возникновении (синего экрана) Blue Screen Of Death (BSOD) (2)
[Прогараммирование]
Разработка ПО с открытыми исходными текстами как особый вид прикладной науки
[Операционные системы]
MAC OS
[Устронение ошибок систем]
Возможные нежелательные последствия разгона
[Прогараммирование]
Строковый тип данных
[Прогараммирование]
Прячем целые программы Delphi

Категории
HTML/CSS [21]
jQuery/JS [36]
PHP [4]
Для Ucoz [38]

Популярный софт
Iron Kaspersky Internet Security 2015
Kaspersky Internet Security 2015
Iron Virtual DJ
Virtual DJ
Iron SoundForge 11
SoundForge 11
Iron Alcohol 120
Alcohol 120
Iron Norton Internet Security 2014
Norton Internet Security 2014
Iron Loaris Trojan Remover
Loaris Trojan Remover

Жми

Copyright MyCorp © 2024Конструктор сайтов - uCoz