2

Blogger API for PHPを使用しています。サイト名だけでブログIDを取得したい。

たとえばhttp://sleeptalkinman.blogspot.com/、ブログ ID は 3117168333067506122 です。これはブログ ID がソースに表示されるため可能ですが、スクリーン スクレイピングはお勧めできません。

HTMLからスクレイピングするのではなく、APIを介して取得することは可能ですか?

4

4 に答える 4

4

現在、最新のブロガー API はバージョン 3.0 です。その新しい API を使用すると、リソース タイプでブログ ID を取得できますgetByUrl。これは、私のブログと API を使用した完全な例です。

https://www.googleapis.com/blogger/v3/blogs/byurl?url=http%3A%2F%2Fwww.ifaniqbal.com&key=AIzaSyDNkR52eSfObZi9BPKrTytbowOAM7Js9uY

その例を Ctrl+C し、ブラウザで Ctrl+V を押してテストしてください。この例の戻りフィールドの 1 つは 'id' フィールドです。これは、次のように、(JSON で) 必要なブログ ID です。

{
"kind": "blogger#blog",
"id": "7107469463017369923",
"name": "Ifan Iqbal",
"description": "Tips, Download, Resensi, Tutorial, Blog, Blogspot",
"published": "2012-02-28T23:54:48+07:00",
"updated": "2013-07-11T16:24:58+07:00",
"url": "http://www.ifaniqbal.com/",
"selfLink": "https://www.googleapis.com/blogger/v3/blogs/7107469463017369923",
"posts": {
 "totalItems": 161,
 "selfLink": "https://www.googleapis.com/blogger/v3/blogs/7107469463017369923/posts"
},
"pages": {
 "totalItems": 2,
 "selfLink": "https://www.googleapis.com/blogger/v3/blogs/7107469463017369923/pages"
},
"locale": {
 "language": "in",
 "country": "",
 "variant": ""
}

}

于 2013-07-16T14:44:00.537 に答える
3

(元の回答を投稿しましたが、代わりに Zend_Gdata を使用するように変更しました)。

ブログIDの取得方法はこちら。

<?php

$user = 'username';
$pass = 'password';

// I have to admit, I would normally use the autoloader
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');

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, 'blogger', null,
    Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null,
    Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE');
$gdClient = new Zend_Gdata($client);

/**
 * Get the blog ID
 * @param string $feed URL to blog feed or blog name
 *  Example:
 *   - http://googleblog.blogspot.com/feeds/posts/default
 */
function getBlogId($gdClient, $feed)
{
    // You could build the /feed/posts/default part yourself and just pass
    // googleblog.blogspot.com:
    // $feed = 'http://' . $feed . '/feeds/posts/default';
    $query = new Zend_Gdata_Query($feed);
    $feed = $gdClient->getFeed($query);
    preg_match('/blog-([0-9]+)/', $feed->id->text, $match);

    if (isset($match[1]))
    {
        return $match[1];
    }

    return false;
}

echo getBlogId($gdClient, 'http://sleeptalkinman.blogspot.com/feeds/posts/default');

元の答え

情報を取得しようとしている場合は、www.blogger.com の部分を置き換えて、blogID を無視するだけでよいはずです。たとえば、http://dailyvim.blogspot.com/からすべての投稿を見つけようとしている場合は、次のようにします。

http://dailyvim.blogspot.com/feeds/posts/default

通常の URL の代わりに、http://www.blogger.com/feeds/ [blogID]/posts/default

この方法は、認証されたユーザーがブログへの書き込みアクセス権を持っている限り、ブログへの公開にも使用できます。ただし、これをテストすることはできませんでした。

ブログ ID の取得

以下を使用して、上記のフィードからブログ ID を取得できます。

$content = file_get_contents('http://sleeptalkinman.blogspot.com/feeds/posts/default');
preg_match('/<id>.*blog-([0-9]+)</id>/U', $content, $match);
print $match[1]; // Prints the blog ID

最新の投稿の投稿 ID を取得する

上記のフィードから最新の投稿を取得することもできます (今回は代わりに SimpleXML を使用します)。

$feed = simplexml_load_file('http://sleeptalkinman.blogspot.com/feeds/posts/default');
foreach ($feed->entry as $entry) 
{
    // I'm getting both the blog ID and post ID
    preg_match('/blog-([0-9]+).*post-([0-9]+)/', $entry->id, $match);
    print $match[2];

    // Now you can use the following URL with the blogger API
    $comment_feed_url = 'http://www.blogger.com/feeds/' . $match[1] . '/' . $match[2] . '/comments/default';
}
于 2010-01-12T21:43:15.467 に答える
-1
$blog = "sleeptalkinman.blogger.com";

$username = split('\.', $blog)[0];

上記のような URL を持っている限り、求めているものが得られるはずです。

于 2010-01-12T21:32:22.730 に答える
-1

ブログの URL を使用してコメントを取得することもできるようです。

http://someusername.blogspot.com/feeds/comments/default

同様の方法で、特定の投稿に対するすべてのコメントを取得できます。つまり、/feeds/xxxxxxxx/comments/default です。ここで、xxxxxxxx は投稿 ID です。

また、クエリ文字列 ?published-min=2010-03-16T00:00:00&published-max=2010-03-24T23:59:59 を使用して、日付で修飾できます。

補足として、Blogger API はフィードを XML ではなく JSON として返すことができます。これは、クエリ文字列 ?alt=json を使用して XML を解析するよりもはるかに簡単に処理できることがわかりました。

于 2010-09-17T21:03:45.033 に答える