Kamis, 15 Agustus 2013

Rismawan Gpr

konsep-konsep kunci

Sebelum Anda masuk ke kode PHP, bagian ini memberikan gambaran Blogger Data API. Seperti dengan semua layanan berbasis REST, API menerima permintaan HTTP yang berisi satu atau lebih argumen input XML-encoded dan kembali respon XML-dikodekan yang bisa diurai dalam klien XML-aware. Dengan API Blogger, respon selalu terdiri dari sebuah Atom atau RSS feed yang berisi informasi yang diminta.

Blogger memiliki feed baik publik dan swasta. Anda dapat mengakses feed umum, seperti daftar posting dalam blog, tanpa otentikasi. Feed swasta memerlukan otentikasi. Misalnya, pakan swasta memerlukan otentikasi untuk melakukan menambah atau memperbarui operasi pada posting blog atau komentar. Contoh dalam artikel ini menunjukkan kedua jenis feed.

Untuk mendapatkan hasil maksimal dari artikel ini, Anda harus memiliki akun Blogger dengan setidaknya satu blog dan satu posting. Jika Anda tidak memilikinya, Anda dapat login ke Blogger (lihat Sumber), membuat blog baru, dan menambahkan posting baru itu untuk tujuan pengujian. Sementara Anda login, cobalah untuk mengakses http://www.blogger.com/feeds/default/blogs URL di web browser. Anda harus melihat sesuatu yang mirip dengan Listing 1.

Listing 1. Blogger metafeed
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
<feed xmlns='http://www.w3.org/2005/Atom' 
 xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'>
  <id>tag:blogger.com,1999:user-12345USERIDHERE12345.blogs</id>
  <updated>2011-09-02T03:35:34.547Z</updated>
  <title type='text'>V Vaswani's Blogs</title>
  <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' 
   href='http://www.blogger.com/feeds/12345USERIDHERE12345/blogs'/>
  <link rel='self' type='application/atom+xml' 
    href='http://www.blogger.com/feeds/12345USERIDHERE12345/blogs'/>
  <link rel='alternate' type='text/html' 
    href='http://www.blogger.com/profile/12345USERIDHERE12345'/>
  <author>
    <name>V Vaswani</name>
    <email>noreply@blogger.com</email>
  </author>
  <generator version='7.00' uri='http://www.blogger.com'>Blogger</generator>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
  <entry>
    <id>tag:blogger.com,1999:user-12345USERIDHERE12345.blog
     -12345BLOGIDHERE12345</id>
    <published>2008-02-19T23:30:41.755-08:00</published>
    <updated>2011-09-01T04:01:19.669-07:00</updated>
    <title type='text'>V Vaswani's Blog</title>
    <summary type='html'></summary>
    <link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/
     12345USERIDHERE12345/blogs/12345BLOGIDHERE12345'/>
    <link rel='alternate' type='text/html' href='http://vvaswani.blogspot.com/'/>
    <link rel='http://schemas.google.com/g/2005#feed' 
     type='application/atom+xml' 
     href='http://vvaswani.blogspot.com/feeds/posts/default'/>
    <link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml'
     href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/posts/default'/>
    <link rel='http://schemas.google.com/blogger/2008#template' 
     type='application/atom+xml' 
     href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/template'/>
    <link rel='http://schemas.google.com/blogger/2008#settings' 
     type='application/atom+xml' 
     href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/settings'/>
    <author>
      <name>V Vaswani</name>
      <email>noreply@blogger.com</email>
    </author>
    <gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' 
     name='IS_PUBLIC_BLOG' value='true'/>
    <gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' 
     name='PICASAWEB_ALBUM_ID' value='0'/>
  </entry>
</feed>

 The metafeed pada Listing 1 menyediakan daftar semua blog yang terkait dengan pengguna saat dikonfirmasi. Ini membuka dengan elemen <feed> sebagai elemen root. Unsur <feed> berisi:

     elemen <link>, yang berisi URL untuk berbagai versi feed
     Sebuah elemen <author>, yang menentukan pemilik akun
     elemen <openSearch>, yang mengandung statistik ringkasan

The terluar elemen <feed> membungkus satu atau lebih elemen <entry>, masing-masing mewakili sebuah blog. Setiap <entry> berisi detail lebih lanjut, termasuk judul, deskripsi, tanggal pembuatan, tanggal update terakhir, dan penulis blog masing-masing. Setiap entri juga mencakup seperangkat link feed, yang feed yang berisi posting blog, template blog, dan pengaturan blog.

Pada Listing 1, setiap blog dikaitkan dengan pengenal unik, atau blog ID. Blog ID digunakan untuk membangun URL ke feed blog spesifik. Misalnya, untuk mencari pakan posting untuk blog tertentu, gunakan URL yang ditentukan dalam <tautan rel = 'http://schemas.google.com/g/2005 # post' ... /> Elemen. Kode 2 menunjukkan apa feed posting akan terlihat seperti.



Listing 2. Blogger post feed
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
<feed xmlns='http://www.w3.org/2005/Atom' 
 xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 
 xmlns:georss='http://www.georss.org/georss' 
 xmlns:thr='http://purl.org/syndication/thread/1.0'>
  <id>tag:blogger.com,1999:blog-12345BLOGIDHERE12345</id>
  <updated>2011-09-01T21:06:44.240-07:00</updated>
  <title type='text'>V Vaswani's Blog</title>
  <subtitle type='html'></subtitle>
  <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' 
   href='http://vvaswani.blogspot.com/feeds/posts/default'/>
  <link rel='self' type='application/atom+xml' 
   href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/posts/default'/>
  <link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' 
   href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/posts/default'/>
  <link rel='alternate' type='text/html' href='http://vvaswani.blogspot.com/'/>
  <author>
    <name>V Vaswani</name>
    <email>noreply@blogger.com</email>
  </author>
  <generator version='7.00' uri='http://www.blogger.com'>Blogger</generator>
  <openSearch:totalResults>3</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
  <entry>
    <id>tag:blogger.com,1999:blog-12345BLOGIDHERE12345.post-
     12345POSTIDHERE12345</id>
    <published>2011-09-01T03:34:00.001-07:00</published>
    <updated>2011-09-01T21:06:44.258-07:00</updated>
    <title type='text'>My Third Post</title>
    <content type='html'>This is my third post
    <br /></content>
    <link rel='replies' type='application/atom+xml' 
     href='http://vvaswani.blogspot.com/feeds/12345POSTIDHERE12345/comments/default'
     title='Post Comments'/>
    <link rel='replies' type='text/html' 
     href='https://www.blogger.com/comment.g?
     blogID=12345BLOGIDHERE12345&postID=12345POSTIDHERE12345' 
     title='0 Comments'/>
    <link rel='edit' type='application/atom+xml' 
     href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/posts/
     default/12345POSTIDHERE12345'/>
    <link rel='self' type='application/atom+xml' 
     href='http://www.blogger.com/feeds/12345BLOGIDHERE12345/posts/
     default/12345POSTIDHERE12345'/>
    <link rel='alternate' type='text/html' 
     href='http://vvaswani.blogspot.com/2011/09/my-third-d.html' 
     title='My Third Post'/>
    <author>
    <name>V Vaswani</name>
    <email>noreply@blogger.com</email>
    </author>
    <thr:total>0</thr:total>
  </entry>
  ...
</feed>
Kode 2 menunjukkan bahwa pakan posting berisi kumpulan elemen <entry>, dan bahwa masing-masing mewakili satu pos blog. Setiap <entry> meliputi:

     Judul, isi, dan tanggal penerbitan pos.
     Link ke posting URL publik, posting mengedit URL, komentar URL feed, dan feed komentar mengedit URL. Feed ini digunakan untuk melihat dan mengedit posting, atau komentar, melalui Blogger Data API.

Masing-masing pos juga memiliki pengenal unik, disebut pasca ID, yang dalam elemen <id> entri. Ini adalah string komposit yang mencakup baik ID blog dan posting ID, dalam tag Format: blogger.com, 1999: blog-BLOGID.post-POSTID. Sebagai contoh, dalam tag string yang mengidentifikasi: blogger.com, 1999: blog-1234.post-6789, identifier blog adalah 1234 dan identifier pos 6789.

 Mengambil blog dan posting

Sekarang Anda tahu cara mengakses blog dan posting feed melalui API, mencoba hal yang sama dari dalam aplikasi PHP. Untuk menghasilkan feed dalam Daftar 1 dan 2, pertama secara manual login ke Blogger dengan akun Google. Untuk mengambil dan memproses feed dari dalam aplikasi PHP, tugas otentikasi yang sama perlu dilakukan pemrograman.

Melakukan otentikasi secara manual adalah tugas yang cukup berantakan dan membutuhkan banyak kode untuk menjelaskan berbagai skenario yang dapat timbul selama transaksi otentikasi khas. Untungnya, Zend Framework termasuk Zend_Gdata, perpustakaan klien PHP dirancang khusus bagi para pengembang berusaha untuk mengintegrasikan aplikasi PHP dengan Data API Google. Zend_Gdata menyediakan nyaman, antarmuka berorientasi objek untuk Data API Google (lihat link di Resources untuk mendownloadnya). Hal ini merangkum sebagian besar tugas umum, termasuk otentikasi, dan membuat Anda bebas untuk fokus pada fungsi inti dari aplikasi Anda.

Setelah Anda menginstal Gdata perpustakaan Zend, melihat melalui Listing 3. Ini menunjukkan bagaimana memproses pakan dari Listing 1 dan mengubahnya menjadi sebuah halaman web daftar semua weblog pengguna dikonfirmasi di Blogger.


Listing 3. Listing blogs
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // get list of all blogs
  $query = new Zend_Gdata_Query('http://www.blogger.com/feeds/default/blogs');
  $feed = $service->getFeed($query);
} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
<html>
  <head></head>
  <body>
    <h2>Blogs</h2>
    <ul>
      <?php foreach ($feed as $entry): ?>      
      <li>
        <a href="<?php 
         echo $entry->getLink('alternate')->getHref(); ?>">
         <?php echo $entry->getTitle(); ?> 
        </a>          
      </li>
      <?php endforeach; ?>
    </ul>  
  </body>
</html>


Listing 3 beban perpustakaan kelas Zend dan menginisialisasi sebuah instance dari kelas layanan Zend_Gdata. Zend_Gdata menggunakan objek Zend_Http_Client, yang disediakan dengan informasi otentikasi user yang diperlukan dan digunakan untuk membuka koneksi dikonfirmasi ke layanan Blogger. Kelas ini juga berfungsi sebagai titik kontrol untuk semua interaksi berikutnya dengan Blogger Data API.

Setelah koneksi dikonfirmasi terbuka, metode getFeed () digunakan untuk mengambil daftar blog. getFeed () menerima sebuah objek Zend_Gdata_Query, yang lulus URL untuk daftar feed blog. Respon terhadap getFeed () panggilan API feed XML mirip dengan yang di Listing 1, yang kemudian dipecah dan diubah menjadi objek PHP. Entri dalam pakan yang direpresentasikan sebagai elemen array, sehingga memungkinkan untuk:

     Iterate atas feed
     Ambil nama blog individu dan URL
     Format mereka untuk ditampilkan di web browser

Gambar 1 menunjukkan output yang mungkin Anda lihat.


Gambar 1. Contoh halaman web menampilkan blog pengguna
Screen capture of a web page that lists a user's blogs 

Seperti disebutkan sebelumnya, masing-masing blog dan posting dalam layanan Blogger memiliki pengenal yang unik. Jika Anda memiliki pengenal yang unik untuk blog, Anda dapat menghasilkan URL untuk feed blog yang sesuai, yang berisi daftar semua posting dalam blog itu. Kode 4 menunjukkan proses untuk mengambil dan pengolahan seperti feed blog dengan perpustakaan klien Zend_Gdata.

Listing 4. Listing blog posts
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // get list of all posts in blog feed
  $query = new Zend_Gdata_Query(
   'http://www.blogger.com/feeds/YOUR-BLOG-ID-HERE/posts/default');
  $feed = $service->getFeed($query);
} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
<html>
  <head></head>
  <body>
    <h2>Posts</h2>
    <ul>
      <?php foreach ($feed as $entry): ?>      
      <li>
        <a href="<?php 
         echo $entry->getLink('alternate')->getHref(); ?>">
            <?php echo $entry->getTitle(); ?> 
        </a>          
      </li>
      <?php endforeach; ?>
    </ul>  
  </body>
</html>  

Seperti pada Listing 3, 4 Listing pertama menginisialisasi perpustakaan Zend dan menciptakan dikonfirmasi objek layanan Zend_Gdata. Identifier blog digunakan untuk membangun URL ke feed blog, yang diubah menjadi objek Zend_Gdata_Query dan diteruskan ke getFeed () metode. Hasil pakan kemudian dipecah dan diproses, dengan cara biasa, untuk menghasilkan daftar semua posting dalam blog tertentu. Gambar 2 menunjukkan contoh output.

Gambar 2. Halaman web menampilkan posting blog pengguna
Screen capture of a web page that list a user's blog posts 

You can combine Listing 3 and Listing 4 to produce a list of all the authenticated user's blogs and posts within each blog. Listing 5 shows the combined code.

Listing 5. Listing blogs and blog posts
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // create array
  $data = array();
  
  // get list of all posts in all blog feeds
  $query1 = new Zend_Gdata_Query('http://www.blogger.com/feeds/default/blogs');
  $feed1 = $service->getFeed($query1);
  foreach ($feed1 as $entry1) {
    $arr = explode('-', (string)$entry1->getId());
    $id = $arr[2];
    $query2 = new Zend_Gdata_Query(
     'http://www.blogger.com/feeds/'.$id.'/posts/default');
    $feed2 = $service->getFeed($query2);
    $blogArray = array(
      'title' => (string)$entry1->getTitle(), 
      'uri' => (string)$entry1->getLink('alternate')->getHref(),
      'posts' => array()
    );
    foreach ($feed2 as $entry2) {
      $postArray = array(
        'title' => (string)$entry2->getTitle(), 
        'uri' => (string)$entry2->getLink('alternate')->getHref()
      );
      $blogArray['posts'][] = $postArray;
    }
    $data[] = $blogArray;
  }
} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
<html>
  <head></head>
  <body>
    <h2>Blogs and Posts</h2>
    <div id="results">
      <?php foreach ($data as $d): ?>      
      <ul>      
        <li><a href="<?php echo $d['uri']; ?>">
        <?php echo $d['title']; ?></a></li>
          <ul>
          <?php foreach ($d['posts'] as $p): ?>      
            <li><a href="<?php echo $p['uri']; ?>">
            <?php echo $p['title']; ?></a></li>
          <?php endforeach; ?>
          </ul>
      </ul>
      <?php endforeach; ?>
    </div>  
  </body>
</html>  

  
Listing 5 permintaan pertama metafeed blog dan iterates atas entri di dalamnya untuk mengambil identifier unik setiap blog. Identifier ini kemudian digunakan untuk membangun URL ke blog pasca pakan, yang diminta dan diproses untuk mengekstrak judul setiap posting dan URL. Semua informasi ini disimpan dalam array bersarang, seperti pada Listing 6.

Listing 6. Nested array
Array
(
  [0] => Array
  (
    [title] => V Vaswani's Blog
    [uri] => http://***.blogspot.com/
    [posts] => Array
    (
      [0] => Array
      (
        [title] => My Fourth Post
        [uri] => http://***.blogspot.com/2011/09/my-fourth-post.html
      )

      [1] => Array
      (
        [title] => My Third Post
        [uri] => http://***.blogspot.com/2011/09/my-third-d.html
      )

      [2] => Array
      (
        [title] => My Second Post
        [uri] => http://***.blogspot.com/2011/08/my-second-post.html
      )

      [3] => Array
      (
        [title] => My First Post
        [uri] => http://***.blogspot.com/2008/02/testing.html
      )
    )
  )

  [1] => Array
  (
    [title] => V Vaswani's Second Blog
    [uri] => http://***.blogspot.com/
    [posts] => Array
    (
      [0] => Array
      (
        [title] => My First Post in my Second Blog
        [uri] => http://***.blogspot.com/2011/09/my-first-post-in-my-second-blog.html
      )
    )
  )
)

Setelah array benar-benar dihasilkan, Anda dapat iterate di atasnya dan menyiapkan daftar bersarang blog dan posting mereka. Gambar 3 menunjukkan contoh output.

Gambar 3. Halaman web yang menampilkan blog pengguna dan posting blog

Screen capture of a web page that lists a user's blogs and blog posts for each blog 

Menambahkan posting blog

Selain memungkinkan pasca pengambilan, Blogger Data API juga memungkinkan pengguna otentik untuk menambah posting baru ke blog pemrograman. Membuat objek Zend_Gdata_App_Entry baru, mengatur judul dan isi, dan kemudian POST ke feed posting. Daftar 7 menunjukkan contoh kode.


Listing 7. Adding a blog post
<?php
if (isset($_POST['submit'])) {

  // load Zend Gdata libraries
  require_once 'Zend/Loader.php';
  Zend_Loader::loadClass('Zend_Gdata');
  Zend_Loader::loadClass('Zend_Gdata_Query');
  Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
  Zend_Loader::loadClass('Zend_Gdata_Feed');

  // set credentials for ClientLogin authentication
  $user = "your-username@gmail.com";
  $pass = "your-password";

  // set blog id
  $id = 'YOUR-BLOG-ID-HERE';

  try {
    // perform login 
    // initialize service object
    $client = Zend_Gdata_ClientLogin::getHttpClient(
      $user, $pass, 'blogger');
    $service = new Zend_Gdata($client);

    // create a new entry object
    // populate it with user input    
    $uri = 'http://www.blogger.com/feeds/' . $id . '/posts/default';
    $entry = $service->newEntry();
    $entry->title = $service->newTitle($_POST['title']);
    $entry->content = $service->newContent($_POST['body']);
    $entry->content->setType('text');

    // save entry to server
    // return unique id for new post
    $response = $service->insertEntry($entry, $uri);
    $arr = explode('-', $response->getId());
    $id = $arr[2];
    echo 'Successfully added post with ID: ' . $id;

  } catch (Exception $e) {
    die('ERROR:' . $e->getMessage());  
  }
}
?>
<html>
  <head></head>
  <body>
    <h2>Add New Post</h2>
    <form method="post">
      Title: <br/> <input type="text" name="title" 
       size="50" /> <br/>
      Body: <br/> <textarea name="body" cols="40" 
       rows="10"> </textarea> <br/>
      <input type="submit" name="submit" value="Post" />
    </form>
  </body>
</html>  
  
Dalam kode pada Listing 7, bentuk web sederhana memungkinkan pengguna untuk memasukkan judul dan tubuh untuk posting blog. Setelah formulir dikirimkan, script memuat perpustakaan kelas Zend dan menciptakan objek layanan dikonfirmasi. Script kemudian menggunakan newEntry () metode objek layanan untuk membuat objek entri baru dan menggunakan metode newTitle () dan newContent () untuk mengatur judul dan isi dari posting blog dari masukan pengguna. Setelah atribut ini ditetapkan, metode insertEntry () digunakan untuk menyimpan posting baru ke server Google.

Gambar 4 menunjukkan contoh formulir.

Gambar 4. Formulir Web untuk menambahkan posting blog baru

Screen capture of the web form to add a new blog post with Title and Body fields 

Nilai kembali dari metode insertEntry () adalah entry mewakili tulisan yang baru dibuat. Catatan ini sekarang berisi posting pengenal unik, yang bisa digali dan ditampilkan pada halaman hasil. Setelah disimpan, posting baru akan terlihat dalam blog publik dan juga muncul dalam semua feed API untuk blog itu.

Mengedit dan menghapus posting blog

Anda juga dapat menghapus atau mengedit posting yang ada melalui Blogger Data API. Dalam kedua kasus, DELETE sesuai atau PUT permintaan harus dikirimkan ke pos untuk merubah URL (lihat Listing 2 untuk contoh). Hanya pengguna terotentikasi dapat melakukan kedua operasi ini.

Kode pada Listing 8 menunjukkan bagaimana untuk menghapus posting blog yang ada melalui API, dengan asumsi Anda sudah memiliki blog dan posting ID.
 
 


Listing 8. Deleting a blog post
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog and post ids
$bid = 'YOUR-BLOG-ID-HERE';
$pid = 'YOUR-POST-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // set URI for entry to delete
  // obtain from <link rel=edit ... />
  $uri = 'http://www.blogger.com/feeds/' . $bid . '/posts/default/' . $pid;
  $service->delete($uri);
  echo 'Successfully deleted post with ID: ' . $pid;

} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
  
 Daftar 8 menggunakan delete () metode objek layanan untuk menghapus posting blog tertentu. The metode delete () menerima posting mengedit URL dan mengirimkan permintaan DELETE untuk URL itu. Setelah dihapus, posting blog akan hilang dari kedua blog umum dan API setiap feed yang referensi itu.

Untuk menampilkan kode untuk memperbarui posting blog yang ada melalui API, sekali lagi dengan asumsi Anda sudah memiliki blog dan posting ID, menggunakan kode pada Listing 9.


Listing 9. Updating a blog post
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog and post ids
$bid = 'YOUR-BLOG-ID-HERE';
$pid = 'YOUR-POST-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // set URI for entry to update
  // obtain from <link rel=self ... />
  $uri = 'http://www.blogger.com/feeds/' . $bid . '/posts/default/' . $pid;

  // get the existing entry
  // set new values
  // save it back
  $response = $service->get($uri);
  $entry = new Zend_Gdata_App_Entry($response->getBody());
  $entry->title = $service->newTitle("New title");
  $entry->content = $service->newContent("New content");
  $entry->content->setType('text');
  $service->updateEntry($entry);
  echo 'Successfully updated post with ID: ' . $pid;

} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>

Memperbarui posting blog melalui API adalah proses dua langkah. Pertama, Anda perlu untuk mengambil posting blog yang ada dan mengubahnya menjadi objek Zend_Gdata_App_Entry. Kemudian, Anda dapat menggunakan metode objek layanan, seperti newTitle () dan newContent (), untuk memperbarui entri dan menyimpannya kembali ke server menggunakan updateEntry () metode.

Serupa dengan metode insertEntry (), nilai kembali dari updateEntry () metode adalah entri yang mewakili pos, termasuk identifier unik dan konten. Setelah disimpan, pos diperbarui akan terlihat dalam blog publik dan dalam semua API feed referensi blog itu.


Bekerja dengan komentar

Sama seperti Anda dapat menambah, mengedit, dan menghapus posting, Anda juga dapat menambahkan, mengedit, dan menghapus komentar posting. Pada Listing 2, perhatikan bahwa setiap entri posting termasuk link ke posting feed komentar. Menambahkan komentar baru adalah yang sederhana seperti memasukkan entri ke dalam feed komentar.

Daftar 10 menunjukkan proses untuk menambahkan komentar baru untuk posting.
 


Listing 10. Adding a new comment
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog and post ids
$bid = 'YOUR-BLOG-ID-HERE';
$pid = 'YOUR-POST-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // create a new entry object
  // populate it with user input    
  $uri = "http://www.blogger.com/feeds/$bid/$pid/comments/default";
  $entry = $service->newEntry();
  $entry->content = $service->newContent('This is a very interesting post.');
  $entry->content->setType('text');

  // save entry to server
  // return unique id for new comment
  $response = $service->insertEntry($entry, $uri);
  $arr = explode('/', $response->getEditLink()->href);
  $id = $arr[8];
  echo 'Successfully added comment with ID: ' . $id;

} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>

Menambahkan komentar baru hampir sama dengan menambahkan posting baru, perbedaan hanya terletak pada URL yang diposting permintaan (dalam hal ini, URL feed komentar). Respon terhadap metode insertEntry () adalah obyek yang mewakili komentar baru ditambahkan. Objek kemudian bisa diurai untuk mengambil pengenal komentar unik, yang diperlukan jika Anda ingin menghapus komentar nanti.

Dengan asumsi Anda memiliki pengenal komentar, Anda dapat menggunakan kode pada Listing 11 untuk pemrograman menghapus komentar dengan metode delete ().


Listing 11. Deleting a comment
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog, post and comment ids
$bid = 'YOUR-BLOG-ID-HERE';
$pid = 'YOUR-POST-ID-HERE';
$cid = 'YOUR-COMMENT-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // set URI for entry to delete
  // obtain from <link rel=edit ... />
  $uri = "http://www.blogger.com/feeds/$bid/$pid/comments/default/$cid";
  $service->delete($uri);
  echo 'Successfully deleted comment with ID: ' . $cid;

} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>

Anda juga dapat menggunakan URL yang sama umpan komentar untuk mengambil daftar semua komentar untuk posting, seperti pada Listing 12.

Listing 12. Listing comments
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog and post ids
$bid = 'YOUR-BLOG-ID-HERE';
$pid = 'YOUR-POST-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // get list of all comments for post
  $uri = "http://www.blogger.com/feeds/$bid/$pid/comments/default/";
  $query = new Zend_Gdata_Query($uri);
  $feed = $service->getFeed($query);
} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
<html>
  <head></head>
  <body>
    <h2>Comments</h2>
    <div id="results">
      <ul>
      <?php foreach ($feed as $entry): ?>      
        <?php $author = $entry->getAuthor(); ?>
        <li><?php echo $entry->getTitle(); ?> 
         - <?php echo $author[0]->getName(); ?> <br/>
        <?php echo date('d M Y H:i', strtotime($entry->getUpdated())); ?>
        </li>          
      <?php endforeach; ?>
    </ul>  
  </body>
</html>

Contoh aplikasi: Content Management System

Mari kita meletakkan segala sesuatu ke dalam praktek dengan membangun aplikasi dunia nyata sederhana yang menunjukkan kekuatan Blogger Data API. Contoh aplikasi adalah manajer konten berbasis web yang memungkinkan pengguna melihat posting blog mereka yang ada, menambah posting baru, dan mengubah atau menghapus posting yang ada. Suntingan dilakukan melalui editor WYSIWYG browser berbasis dan dikirim ke Blogger melalui Blogger Data API.

Untuk memulai, download dan instal editor TinyMCE JavaScript pada server pengembangan (lihat Sumberdaya untuk link). Buat script berisi kode yang ditunjukkan pada Listing 13.


Listing 13. Managing blog content
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Feed');

// set credentials for ClientLogin authentication
$user = "your-username@gmail.com";
$pass = "your-password";

// set blog id
$bid = 'YOUR-BLOG-ID-HERE';

try {
  // perform login 
  // initialize service object
  $client = Zend_Gdata_ClientLogin::getHttpClient(
    $user, $pass, 'blogger');
  $service = new Zend_Gdata($client);

  // for add and edit operations
  if (isset($_POST['submit'])) {
    // if post id present
    // update post with new content
    if (isset($_POST['pid'])) {      
      $arr = explode('-', $_GET['pid']);
      $pid = $arr[2];
      $uri = 'http://www.blogger.com/feeds/' . $bid . '/posts/default/' . $pid;
      $response = $service->get($uri);
      $entry = new Zend_Gdata_App_Entry($response->getBody());
      $entry->title = $service->newTitle($_POST['title']);
      $entry->content = $service->newContent($_POST['body']);
      $entry->content->setType('text');
      $service->updateEntry($entry);
      echo 'Successfully updated post with ID: ' . $pid;    
    } else {
      // if post id not present
      // create a new post
      // populate it with user input    
      $uri = 'http://www.blogger.com/feeds/' . $bid . '/posts/default';
      $entry = $service->newEntry();
      $entry->title = $service->newTitle($_POST['title']);
      $entry->content = $service->newContent($_POST['body']);
      $entry->content->setType('text');
      $response = $service->insertEntry($entry, $uri);
      $arr = explode('-', $response->getId());
      $id = $arr[2];
      echo 'Successfully added post with ID: ' . $id;  
    }
  }

  // for edit and delete operations
  if (isset($_GET['op'])) {
    // generate post URL
    $arr = explode('-', $_GET['pid']);
    $pid = $arr[2];
    $uri = 'http://www.blogger.com/feeds/' . $bid . '/posts/default/' . $pid;
    switch($_GET['op']) {
      case 'delete':
        // delete post
        $service->delete($uri);
        echo 'Successfully deleted post with ID: ' . $pid;      
        break;
      case 'edit':
        // retrieve post for display in edit form
        $response = $service->get($uri);
        $entry = new Zend_Gdata_App_Entry($response->getBody());
    }
  }
  
  // get list of all posts in blog feed
  $query = new Zend_Gdata_Query(
   'http://www.blogger.com/feeds/'.$bid.'/posts/default');
  $feed = $service->getFeed($query);
} catch (Exception $e) {
  die('ERROR:' . $e->getMessage());  
}
?>
<html>
  <head>
    <script type="text/javascript" 
     src="tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
    <script type="text/javascript">
    tinyMCE.init({
            mode : "textareas",
            theme : "advanced",
            theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,
             justifycenter,justifyright,|,code,preview,|,forecolor,backcolor,|,sub,sup,
             |,fontsizeselect",
            theme_advanced_buttons2 : "cut,copy,paste,|,bullist,numlist,|,outdent,indent,
             |,undo,redo,|,link,unlink,anchor,image,|,removeformat",
            theme_advanced_buttons3 : "",      
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "left",
            theme_advanced_statusbar_location : "bottom",
            theme_advanced_resizing : true
    });

    </script>
  </head>
  <body>
    <h2>View Posts</h2>
    <ul>
    <?php foreach ($feed as $e): ?>  
      <li><?php echo $e->getTitle(); ?> <br/>
      <a href="<?php 
      echo $e->getLink('alternate')->getHref(); ?>">View</a> 
       | <a href="?op=edit&pid=<?php echo $e->getId(); ?>">Edit</a>
       | <a href="?op=delete&pid=<?php echo $e->getId(); ?>">Delete
       </a>
      </li>
    <?php endforeach; ?>
    </ul>
    <a href="<?php echo $_SERVER['PHP_SELF']; ?>">
     Add a new post</a>
    <?php if (isset($_GET['op']) && $_GET['op'] == 'edit'): ?>
    <h2>Edit Post</h2>
    <form method="post">
      Title: <br/> <input type="text" name="title" size="50" 
       value="<?php echo $entry->title; ?>" /> <br/>
      Body: <br/> <textarea name="body" cols="40" 
       rows="10"><?php echo $entry->content; ?></textarea> <br/>
      <input type="hidden" name="pid" 
       value="<?php echo $entry->id; ?>" />
      <input type="submit" name="submit" value="Post" />
    </form>
    <?php else: ?>
    <h2>Add New Post</h2>
    <form method="post">
      Title: <br/> <input type="text" name="title" 
       size="50" /> <br/>
      Body: <br/> <textarea name="body" cols="40" 
       rows="10"> </textarea> <br/>
      <input type="submit" name="submit" value="Post" />
    </form>
    <?php endif; ?>
  </body>
</html>  

Kode di atas mungkin terlihat rumit, tapi itu hanya beberapa pernyataan bersyarat melilit kode yang Anda sudah melihat. Mungkin membantu untuk memecahnya, sebagai berikut.

    
Script dimulai dengan memuat perpustakaan kelas Zend dan pengaturan mandat untuk otentikasi. Hal ini juga mendefinisikan ID blog. Semua operasi berikutnya akan berlangsung hanya pada blog tertentu.
    
Dengan asumsi tidak ada parameter permintaan ada, script menghubungkan ke API Blogger dan permintaan daftar semua posting di blog tertentu. Hal ini kemudian memproses hasil pakan dan menampilkan daftar posting sebagai daftar HTML.

    
Masing-masing pos disertai dengan tiga link: untuk Lihat, Edit, atau Hapus pos. Tautan Lihat menentukan URL publik pos. Edit dan Hapus link hanya memanggil script lagi, lewat itu posting ID dipilih sebagai parameter permintaan GET.
    
Setelah menghasilkan daftar posting saat ini, script juga menghasilkan bentuk web bagi pengguna untuk menambahkan posting baru. Bentuknya berisi single-line input field teks (judul posting) dan area multi-baris teks (untuk isinya).

    
The TinyMCE editor yang juga diinisialisasi pada beban halaman, secara otomatis menangani mengubah area teks ke dalam kolom WYSIWYG mengedit teks dengan kontrol format dan hyperlink.
    
Apa yang terjadi berikutnya tergantung pada operasi pengguna memilih.

    
Jika pengguna memilih ... Lalu ...
    
Untuk menambahkan posting baru Setelah konten yang dimasukkan ke dalam formulir web dan diserahkan, script membuat objek entri baru menggunakan newEntry () metode, mengisinya dengan masukan disampaikan, dan menyimpannya ke blog menggunakan insertEntry () metode.
    
Untuk menghapus posting yang ada ID dari posting yang dipilih diambil dari URL yang diminta, dan URL feed posting dibangun menggunakan ID blog dan posting ID. Pos tersebut kemudian dihapus dengan menggunakan delete () metode objek layanan.
    
Untuk mengedit tulisan yang sudah ada ID dari posting yang dipilih diambil dari URL yang diminta, dan URL feed posting dibangun menggunakan ID blog dan posting ID. Pos tersebut kemudian diambil menggunakan get () metode objek layanan. Isi posting digunakan untuk pra-mengisi formulir web untuk mengedit, bersama-sama dengan field tersembunyi yang berisi tulisan yang unik ID.

    
Setelah pengguna melakukan perubahan dengan isi dan menyampaikan kembali formulir, pos tersembunyi ID digunakan untuk mengidentifikasi dan memperbarui pos yang ada dengan updateEntry () metode.

Demi kesederhanaan, script ini tidak mencakup validasi input. Dalam lingkungan produksi, Anda perlu menambahkan validasi untuk memastikan integritas dan validitas data yang dikumpulkan dari pengguna.
Gambar 5 menunjukkan sistem manajemen konten contoh.

Screen capture of the blog content management interface 

kesimpulan

Pada artikel ini, Anda belajar bagaimana untuk mengintegrasikan posting blog Blogger langsung ke aplikasi PHP dengan menggunakan Blogger Data API dan Zend perpustakaan klien Gdata. Artikel ini memberikan pengenalan format pakan Blogger. Anda juga belajar bagaimana:

     Ambil blog, posting, dan komentar
     Menambah, mengedit, dan menghapus posting
     Melihat, menambah, dan menghapus komentar

Blogger API menyediakan sistem canggih, mekanisme format independen untuk mengintegrasikan konten blog publik ke aplikasi web. Itu bagus untuk mashup, atau untuk membangun antarmuka kustom Anda sendiri untuk Blogger. Cobalah kapan-kapan, dan melihat apa yang dapat Anda lakukan.

   

 
 

  

Selasa, 13 Agustus 2013

tes

Untuk access token di bawah ini sob...
Ambil Token Disini,

Mohon maaf sob saya menggunakan HP jadul jadi tidak bisa mengedit lewat Wap FTP jadi mohon dimaklum.

Senin, 12 Agustus 2013

Test Warna

Rismawan Cidahu

Test Posting Lewat HP

Ngetes saja coy :


  • Teks 1
    jagj mgjtjm gtjm jgmjatgmt mgjatgmt
  • Teks 2 jgmt gmjtgwjpd mgjtptgjadmjtpmdj jgjtpmw gmgdtgatpw mgjpt
  • Teks 3 jgmw mgjtpwmgj

    Alhamdulillah bisa :D