Maison > développement back-end > tutoriel php > Photos, filtres et profils d'utilisateurs populaires avec l'API 500px

Photos, filtres et profils d'utilisateurs populaires avec l'API 500px

Joseph Gordon-Levitt
Libérer: 2025-02-18 08:37:11
original
831 Les gens l'ont consulté

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.

Popular Photos, Filters and User Profiles with the 500px API

Caractéristiques de clé:

  • Photos populaires: La page principale affiche les dernières photos populaires de 500px.
  • Filtrage et tri: Les utilisateurs peuvent filtrer les photos par catégorie (populaire, à venir, etc.) et trier par votes, note et autres critères.
  • Profils de photographes: Voir les profils de photographes individuels avec leurs galeries de photos.

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:

  1. 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
        ]
    }
    Copier après la connexion
  2. Run composer update.

  3. 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]);
        }
    }
    Copier après la connexion
  4. 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);
    });
    Copier après la connexion
  5. 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');
    Copier après la connexion
  6. 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;
        }
    }
    Copier après la connexion
  7. 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.

  8. 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal