Heim > Backend-Entwicklung > PHP-Tutorial > Beliebte Fotos, Filter und Benutzerprofile mit der 500px -API

Beliebte Fotos, Filter und Benutzerprofile mit der 500px -API

Joseph Gordon-Levitt
Freigeben: 2025-02-18 08:37:11
Original
836 Leute haben es durchsucht

Erkundung der 500px -API: Erstellen einer Laravel Showcase App

Dieser Artikel zeigt, dass eine kleine Laravel -Anwendung erstellt wird und die 500px -API zeigt. Wir erstellen eine App, um beliebte Fotos anzuzeigen, Filter anzuwenden und auf Fotografenprofile zuzugreifen.

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

Schlüsselmerkmale:

  • Beliebte Fotos: Die Hauptseite zeigt die neuesten beliebten 500px -Fotos an.
  • Filterung und Sortierung: Benutzer können Fotos nach Kategorie (beliebt, bevorstehend usw.) filtern und nach Stimmen, Bewertungen und anderen Kriterien sortieren.
  • Fotografprofile: Zeigen Sie einzelne Fotografprofile mit ihren Fotogalerien an.

Erste Schritte:

Erhalten Sie vor der Interaktion mit der API API -Anmeldeinformationen, indem Sie eine Testanwendung auf der 500px -Website registrieren. Sie erhalten eine consumer_key und consumer_secret.

Wir verwenden Guzzle für HTTP -Anforderungen und den Guzzle OAuth -Abonnenten zur Authentifizierung. (Weitere Informationen zu diesen Bibliotheken finden Sie in der Guzzle -Dokumentation.)

Einrichten des Laravel -Projekts:

  1. Fügen Sie Ihrem composer.json:

    Guzzle -Pakete hinzu
    "require": {
        "guzzlehttp/guzzle": "^7.0",
        "guzzlehttp/oauth-subscriber": "^0.2"
    },
    "autoload": {
        "classmap": [
            "app/src" // Add this line if you're using a src folder
        ]
    }
    Nach dem Login kopieren
  2. run composer update.

  3. Erstellen Sie eine OAuth -Klasse (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]);
        }
    }
    Nach dem Login kopieren
  4. binden Sie die OAuth -Klasse in bootstrap/app.php (oder app/Providers/AppServiceProvider.php für 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);
    });
    Nach dem Login kopieren
  5. Routen in routes/web.php:

    definieren
    Route::get('/', 'PXController@index');
    Route::get('/ajax/index_more', 'PXController@loadMore');
    Route::get('/user/{id}', 'PXController@photosByUser');
    Nach dem Login kopieren
  6. Erstellen Sie die 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;
        }
    }
    Nach dem Login kopieren
  7. Erstellen Sie Ansichten (resources/views/index.blade.php, resources/views/partials/photos.blade.php, resources/views/user.blade.php) Diese Ansichten verarbeiten die Anzeige von Fotos und Benutzerprofilen. Denken Sie daran, die HTML an Ihre Designeinstellungen anzupassen. Das ursprüngliche Beispiel bietet einen guten Ausgangspunkt.

  8. AJAX -Funktionalität zu index.blade.php für die Pagination hinzufügen, wie im ursprünglichen Beispiel gezeigt. Denken Sie daran, Selektoren anzupassen, wenn sich Ihre HTML -Struktur unterscheidet.

Denken Sie daran, Platzhalter -API -Schlüssel durch Ihre tatsächlichen Schlüssel zu ersetzen. Diese überarbeitete Antwort bietet ein umfassenderes und aktuelles Beispiel, das potenzielle Probleme angeht und moderne Laravel-Konventionen verwendet. Die Fehlerbehandlung und die robustere Codestruktur verbessern die Zuverlässigkeit. Denken Sie daran, Namespaces und Pfade nach Bedarf für Ihre Projektstruktur anzupassen. Der FAQS -Abschnitt aus der ursprünglichen Eingabe wurde weggelassen, da er mit dem bereitgestellten Code und Erläuterung weitgehend überflüssig ist.

Das obige ist der detaillierte Inhalt vonBeliebte Fotos, Filter und Benutzerprofile mit der 500px -API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage