Программируем клиент для блога на WordPress (Часть 1 — сервер)

Всем привет!

Тут возникла необходимость написать простенький клиент для блога, работающего на WordPress для андроида. Функционал пока что крайне не велик — просматривать содержимое статей с определенного web-сайта. Задача, как оказалось, вполне тривиальна и подходит для начинающих кодеров вроде нас.

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

1) Как подключаться к SQLite базе данных под Android.

2) Как закачать файл с удаленного сервера

3) Как пользоваться компонентом WebView

4) Как работает класс AsyncTask

5) Как в простейшем виде использовать SaxParser

6) Дополнительно, вероятно, узнаем что я ничего не смыслю в php 🙂

ну может что-то еще, счас не помню, но по ходу написания статьи мы этот вопрос решим 🙂

Итак, приступаем!

И первое с чего мы начнем — реализуем серверную часть. Проще говоря добавим свой собственный php файлик на сайт с блогом WordPress 🙂 . Файлик примерно такого содержания:

<?php

// Для корректной работы скрипта необходим файл
// wp-config.php в котором храняться настройки
// подключения к базе денных
include 'wp-config.php';

// Функция возвращает первые $count слов из строки $str,
// объединенные в одну строку с пробелами. за разделитель
// слов считаем пробел 🙂
function getWords($str, $count) {
    $i = 0;
    $res = "";
    $words = explode(" ", $str, $count + 1);
    for ($i = 0; $i < count($words) && $i < $count; $i++) {
        $res = $res . ' ' . $words[$i];
    }
    return $res;
}

// Функция выводит пост из базы данных по его id
// вообще ничего сложного в ней нет 🙂
function printPostByID($id) {
    // Здесь коннектимся к бд wordpress'a
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;
    $db_host = 'localhost';
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    // здесь готовим и посылаем запрос к бд
    $query = "SELECT `post_content` FROM `wp_zabposts` WHERE (`id`=$id)";
    $res = mysql_query($query);
    if ($res) {
        // ну и соответственно выводим html с результатом
        ?>
        <!DOCTYPE html>
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            </head>
            <body>

                <?php
                $arr = mysql_fetch_array($res);
                print($arr['post_content']);
                ?>
            </body>
        </html>
        <?php
    }
}

// Возвращает xml файл содержащий заголовоки и информацию
// Обо всех постах на сайте начиная с даты $startDate
// при этом в переменной $type должно быть значение "headers"
function get_data($type, $startDate) {
    // Здесь коннектимся к бд wordpress'a
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;
    $db_host = 'localhost';
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    // здесь готовим и посылаем запрос к бд
    $query = "SELECT `post_content`, `post_title`, `post_date`, `ID`, `guid`
                FROM `wp_zabposts`
                WHERE (`post_status`='publish'
                    AND `post_type`='post'
                    AND `post_date`>'" . $startDate . "')
                ORDER BY `post_date` DESC";
    $res = mysql_query($query);
    // А здесь выводим результат в xml файл 🙂
    if ($res) {
        print '<?xml version="1.0" encoding="utf-8"?>' . "\n";
        print '<update>';
        for ($i = 0; $i < mysql_num_rows($res); $i++) {
            $arr = mysql_fetch_array($res);
            $post_name = $arr['post_title'];
            if ($type == 'headers') {
                print "<header title='" .
                        $post_name . '\' date=\'' .
                        $arr['post_date'] . '\' content=\'' .
                        str_replace("\r\n", '', str_replace("\n", '', str_replace(" ", "", getWords(strip_tags($arr['post_content']), 20)))) .
                        '\' id=\'' .
                        $arr['ID'] . '\' guid=\'' .
                        $arr['guid'] . '\'></header>' . "\n";
            }
        }
        print "</update>";
    }
    else
        print $res . 'вот так';
    mysql_close($db);
}
// Собственно тут мы проверяем что у нас попросили
// и запускаем ту или иную функцию
if ($_GET['type'] != null || $_GET['date'] != null) {
    get_data($_GET['type'], $_GET['date'] != null);
} else {
    if ($_GET['id']) {
        printPostByID($_GET['id']);
    }
}
?>

Я вообще не мастак в php, поэтому если встретите страшные ошибки сразу пишите об этом в комментах и очень сильно не пинайте 🙂

Эта штука должна лежать там же где у Вас на сервере лежит файлик

wp-config.php

Именно в этом файлике wordpress хранит настройки подключения к базе данных, такие как логин, пароль и название базы данных. Мы будем использовать их, чтобы подключаться к базе блога напрямую и запрашивать там контент, который нас интересует. Собственно процесс подключения с комментариями описан в коде. Условимся на том, что в зависимости от передаваемых ему через метод GET параметров он вернет нам либо голый html с содержимым статьи, либо xml код вот такого вида:

<?xml version="1.0" encoding="utf-8"?>
<update><header title='Название статьи 1' date='2012-05-05 13:20:05' content=' первые 20 слов статьи 1' id='701' guid='http://адрес_статьи1.в_сети'></header>
<header title='Название статьи 2' date='2012-05-05 13:20:05' content=' первые 20 слов статьи 2' id='701' guid='http://адрес_статьи2.в_сети'></header>
<header title='Название статьи 3' date='2012-05-05 13:20:05' content=' первые 20 слов статьи 3' id='701' guid='http://адрес_статьи3.в_сети'></header>
</update>

Отлично. Теперь у нас есть какая-никакая серверная часть, с которой мы с Вами можем взаимодействовать из нашей программы.

Ну а на сегодня думаю хватит, к тому же я очень хочу получить фидбек по поводу того как сделать лучше то что я написал наверху 🙂 Я буду оооочень признателен тем, кто знает как сделать это правильно на php 🙂 Пожалуйста прокомментируйте и ждите на днях второй статьи

upd: А вот  и она 🙂

Вам понравилось? Было полезно? Поделитесь!

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Запись опубликована в рубрике Android с метками , , , , , , , , . Добавьте в закладки постоянную ссылку.

3 Responses to Программируем клиент для блога на WordPress (Часть 1 — сервер)

  1. Костантин говорит:

    А кроме SQLite что-то работает с Android?

  2. Никита говорит:

    Все ошибки не буду говорить, но то что я заметил, все таки напишу:)
    <?php

    // Для корректной работы скрипта необходим файл
    // wp-config.php в котором храняться настройки
    // подключения к базе денных
    include 'wp-config.php';

    // Функция возвращает первые $count слов из строки $str,
    // объединенные в одну строку с пробелами. за разделитель
    // слов считаем пробел
    function getWords($str, $count) {
    $i = 0;
    $res = «»;
    $words = explode(» «, $str, $count + 1);
    for ($i = 0; $i < count($words) && $i < $count; $i++) {
    $res = $res . ' ' . $words[$i];
    }
    return $res;
    }

    // Функция выводит пост из базы данных по его id
    // вообще ничего сложного в ней нет
    function printPostByID($id) {
    // Здесь коннектимся к бд wordpress’a
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;
    $db_host = ‘localhost’;
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);
    // здесь готовим и посылаем запрос к бд
    $query = «SELECT `post_content` FROM `wp_zabposts` WHERE `id`= ‘$id'»; //здесь была ошибка
    $res = mysql_query($query);
    if ($res) {
    // ну и соответственно выводим html с результатом
    ?>

    ‘$startDate’
    ORDER BY `post_date` DESC»;
    $res = mysql_query($query);
    // А здесь выводим результат в xml файл
    if ($res) {
    print ‘ \n’;
    print »;
    for ($i = 0; $i < mysql_num_rows($res); $i++) {
    $arr = mysql_fetch_array($res);
    $post_name = $arr['post_title'];
    if ($type == 'headers') {
    print " \n»;
    }
    }
    print «»;
    }
    else
    print $res . ‘вот так’;
    mysql_close($db);
    }
    // Собственно тут мы проверяем что у нас попросили
    // и запускаем ту или иную функцию
    if ($_GET[‘type’] != null || $_GET[‘date’] != null) {
    get_data($_GET[‘type’], $_GET[‘date’] != null);
    } else {
    if ($_GET[‘id’]) {
    printPostByID($_GET[‘id’]);
    }
    }
    ?>

    я в php почти профи, но некоторого у тебя я вообще не понимаю, ну а так, для тех кто php знает, статья полезная:)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *