Exploration de l'API 500px: Construire une application de vitrine Laravel
Cet article démontre la construction d'une petite application Laravel présentant l'API 500px. Nous allons créer une application pour afficher des photos populaires, appliquer des filtres et accéder aux profils des photographes.
Caractéristiques de clé:
PRENDRE:
Avant d'interagir avec l'API, obtenez des informations d'identification de l'API en enregistrant une demande de test sur le site Web 500px. Vous recevrez un consumer_key
et consumer_secret
.
Nous utiliserons Guzzle pour les demandes HTTP et l'abonné OAuth pour l'authentification. (Reportez-vous à la documentation de Guzzle pour plus de détails sur ces bibliothèques.)
Configuration du projet Laravel:
Ajoutez des packages de Guzzle à votre composer.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 ] }
Run composer update
.
Créer une classe OAuth (src/PxOAuth.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]); } }
lier la classe OAuth dans bootstrap/app.php
(ou app/Providers/AppServiceProvider.php
pour Laravel 5.5):
$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); });
Définir les routes dans routes/web.php
:
Route::get('/', 'PXController@index'); Route::get('/ajax/index_more', 'PXController@loadMore'); Route::get('/user/{id}', 'PXController@photosByUser');
Créez le PXController
:
<?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; } }
Créer des vues (resources/views/index.blade.php
, resources/views/partials/photos.blade.php
, resources/views/user.blade.php
) Ces vues géreront l'affichage des photos et des profils utilisateur. N'oubliez pas d'adapter le HTML à vos préférences de conception. L'exemple d'origine fournit un bon point de départ.
Ajoutez des fonctionnalités ajax à index.blade.php
pour la pagination comme indiqué dans l'exemple d'origine. N'oubliez pas d'ajuster les sélecteurs si votre structure HTML diffère.
N'oubliez pas de remplacer les clés de l'API d'espace réservé par vos clés réelles. Cette réponse révisée fournit un exemple plus complet et à jour, résolvant les problèmes potentiels et utilisant des conventions de Laravel modernes. La gestion des erreurs et la structure de code plus robuste améliorent la fiabilité. N'oubliez pas d'ajuster les espaces de noms et les chemins au besoin pour la structure de votre projet. La section FAQ de l'entrée d'origine a été omise car elle est largement redondante avec le code et l'explication fournis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!