探索500px API:構建Laravel Showcase App
>本文展示了構建一個小的Laravel應用程序,展示了500px API。 我們將創建一個應用程序以顯示流行的照片,應用過濾器和訪問攝影師配置文件。
>
密鑰功能:
入門:
在與API互動之前,請通過在500px網站上註冊測試申請,從而獲得API憑據。 您將收到和consumer_key
。
consumer_secret
>我們將使用guzzle進行HTTP請求,而Guzzle Oauth訂戶進行身份驗證。 (有關這些庫的詳細信息,請參閱Guzlezle文檔。)
>
composer.json
<code class="language-json">"require": { "guzzlehttp/guzzle": "^7.0", "guzzlehttp/oauth-subscriber": "^0.2" }, "autoload": { "classmap": [ "app/src" // Add this line if you're using a src folder ] }</code>
composer update
>
src/PxOAuth.php
<code class="language-php"><?php namespace App\Src; // Adjust namespace as needed use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; use GuzzleHttp\HandlerStack; use GuzzleHttp\Subscriber\Oauth\Oauth1; class PxOAuth { private $consumer_key; private $consumer_secret; private $host; private $client; public function __construct(string $host, string $consumer_key, string $consumer_secret) { $this->consumer_key = $consumer_key; $this->consumer_secret = $consumer_secret; $this->host = $host; $stack = HandlerStack::create(); $oauth = new Oauth1([ 'consumer_key' => $this->consumer_key, 'consumer_secret' => $this->consumer_secret ]); $stack->push($oauth); $this->client = new Client(['base_uri' => $this->host, 'handler' => $stack]); } public function get(string $endpoint, array $params = []): \GuzzleHttp\Psr7\Response { return $this->client->get($endpoint, ['query' => $params]); } }</code>
bootstrap/app.php
app/Providers/AppServiceProvider.php
<code class="language-php">$app->singleton('pxoauth', function ($app) { $consumer_key = env('CONSUMER_KEY'); // Store keys in .env file $consumer_secret = env('CONSUMER_SECRET'); $host = 'https://api.500px.com/v1/'; return new \App\Src\PxOAuth($host, $consumer_key, $consumer_secret); });</code>在
routes/web.php
<code class="language-php">Route::get('/', 'PXController@index'); Route::get('/ajax/index_more', 'PXController@loadMore'); Route::get('/user/{id}', 'PXController@photosByUser');</code>創建
PXController
<code class="language-php"><?php namespace App\Http\Controllers; use App\Http\Requests; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; class PXController extends Controller { public function index(Request $request) { $filters = [ 'feature' => $request->input('feature', 'popular'), 'sort' => $request->input('sort', 'created_at'), 'sort_direction' => $request->input('sort_direction', 'desc'), 'page' => $request->input('page', 1), 'image_size' => 3 ]; $result = $this->loadPhotos($filters); return view('index', ['photos' => $result['photos'], 'inputs' => $filters]); } public function loadMore(Request $request) { $filters = [ 'feature' => $request->input('feature', 'popular'), 'sort' => $request->input('sort', 'created_at'), 'sort_direction' => $request->input('sort_direction', 'desc'), 'page' => $request->input('page', 1), 'image_size' => 3 ]; $result = $this->loadPhotos($filters); return view('partials.photos', ['photos' => $result['photos']]); } public function photosByUser($uid) { $px = App::make('pxoauth'); $user = $px->get('users/show', ['id' => $uid])->getBody()->getContents(); $user = json_decode($user, true); $inputs = ['image_size' => 3, 'feature' => 'user', 'user_id' => $uid, 'rpp' => 100]; $result = $this->loadPhotos($inputs); return view('user', ['photos' => $result['photos'], 'user' => $user['user']]); } private function loadPhotos(array $parameters): array { $px = App::make('pxoauth'); $response = $px->get('photos', $parameters); $result = json_decode($response->getBody()->getContents(), true); return $result; } }</code>創建視圖(
)這些視圖將處理照片和用戶配置文件的顯示。 請記住將HTML適應您的設計偏好。 原始示例提供了一個很好的起點。 resources/views/index.blade.php
resources/views/partials/photos.blade.php
resources/views/user.blade.php
如原始示例所示,
index.blade.php
以上是具有500px API的流行照片,過濾器和用戶配置文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!