yugo / blogger

Blogger Rest API

v1.1.0 2019-02-11 21:37 UTC

This package is auto-updated.

Last update: 2024-09-29 05:21:33 UTC


README

非官方的Blogger (REST API) 包,用于Laravel。

特性

  • 获取博客信息。
  • 检索文章。
  • 通过ID或路径检索文章。
  • 搜索文章。
  • 检索页面。
  • 检索单个页面。

安装

通过运行以下命令将Blogger包添加到您的Laravel应用程序中:

composer require yugo/blogger

配置

如果您使用的是Laravel 5.5及以上版本,则提供者将自动通过Laravel的自动包发现注册。如果您收到表示提供者未找到的错误,您可以通过config/app.php文件注册新的提供者。

/*
 * Package Service Providers...
 */
Yugo\Blogger\BloggerServiceProvider::class,

您可以从同一配置文件设置Blogger包的别名。

// facade alias
'Blogger' => Yugo\Blogger\Facades\Blogger::class,

在使用Blogger外观之前,您必须提供博客的API密钥和完整URL。API密钥可以通过此链接生成。

将名为keyurl的两个配置添加到config/services.php文件中。

'blogger' => [
    'key' => env('BLOGGER_KEY'),
    'url' => env('BLOGGER_URL', 'https://yourblog.blogspot.com'),
],

出于安全原因,您可以使用以下示例定义从.env文件中的blogger.keyblogger.url配置。

BLOGGER_KEY="secret-api-key"
BLOGGER_URL="https://yourblog.blogspot.com"

用法

在检索文章、页面和评论之前,您必须首先知道您的博客ID。要检索博客ID数据,您可以使用Blogger外观的blog方法。例如

$blog = Blogger::blog();

可用方法

$blog = Blogger::blog();


// retrieving posts
$posts = Blogger::posts($blog['id']);
$posts = Blogger::search($keyword, $blogId);
$post = Blogger::postById($postId, $blogId);
$post = Blogger::postByPath($path, $blogId);

// retrieving pages
$pages = Blogger::pages($blog['id']);
$page = Blogger::page($pageId, $blogId);

如果您想在文章中包含图片,可以通过链式方法withImages(bool $withImages = true)实现,例如

$posts = Blogger::withImages()->posts();

最佳实践

在检索文章或页面时,您必须在每个方法中定义博客ID。如果您只有一个博客且博客ID是静态的,您可以根据以下示例代码进行最佳实践。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Request;
use Yugo\Blogger\Facades\Blogger;

class BloggerController extends Controller
{
    /**
     * @var Blogger
     */
    private $blogger;

    public function __construct()
    {
        $blog = Cache::remember('blogger.blog', now()->addDays(7), function (){
           return Blogger::blog();
        });

        abort_if(empty($blog), 404, __('Blog not found.'));

        $this->blogger = Blogger::setBlog($blog['id']);
    }

    /**
     * @return JsonResponse
     */
    public function blog(): JsonResponse
    {
        return response()->json($this->blogger->blog());
    }

    /**
     * @return JsonResponse
     */
    public function posts(): JsonResponse
    {
        return response()->json($this->blogger->posts());
    }

    /**
     * @param string $id
     * @return JsonResponse
     */
    public function post(string $id): JsonResponse
    {
        return response()->json($this->blogger->postById($id));
    }

    /**
     * @param string $id
     * @return JsonResponse
     */
    public function comments(string $id): JsonResponse
    {
        return response()->json($this->blogger->comments($id));
    }

    /**
     * @param string $post
     * @param string $comment
     * @return JsonResponse
     */
    public function comment(string $post, string $comment): JsonResponse
    {
        return response()->json($this->blogger->comment($comment, $post));
    }

    /**
     * @param Request $request
     * @return JsonResponse
     */
    public function search(Request $request): JsonResponse
    {
        $this->validate($request, [
            'keyword' => ['required', 'string'],
        ]);

        return response()->json($this->blogger->search($request->keyword));
    }

    /**
     * @return JsonResponse
     */
    public function pages(): JsonResponse
    {
        return response()->json($this->blogger->pages());
    }

    /**
     * @param string $id
     * @return JsonResponse
     */
    public function page(string $id): JsonResponse
    {
        return response()->json($this->blogger->page($id));
    }
}

接下来,如果您想通过浏览器直接访问,可以定义如下所示的路由。

Route::get('blogger/blog', 'BloggerController@blog');
Route::get('blogger/posts', 'BloggerController@posts');
Route::get('blogger/post/{id}', 'BloggerController@post');
Route::get('blogger/post/{id}/comments', 'BloggerController@comments');
Route::get('blogger/post/{post}/comment/{comment}', 'BloggerController@comments');
Route::get('blogger/search', 'BloggerController@search');
Route::get('blogger/pages', 'BloggerController@pages');
Route::get('blogger/page/{id}', 'BloggerController@page');

演示 & 示例代码

完整的运行应用程序可以在blogger.aplikasi.live找到。您可以从此存储库查看代码。

许可证

MIT许可证。