ホームページ > バックエンド開発 > PHPチュートリアル > 500px APIを使用した人気のある写真、フィルター、ユーザープロファイル

500px APIを使用した人気のある写真、フィルター、ユーザープロファイル

Joseph Gordon-Levitt
リリース: 2025-02-18 08:37:11
オリジナル
821 人が閲覧しました

500px APIの探索:Laravel Showcase Appの構築

この記事では、500px APIを紹介する小さなLaravelアプリケーションの構築を示しています。 人気のある写真を表示し、フィルターを適用し、写真家のプロファイルにアクセスするアプリを作成します。

Popular Photos, Filters and User Profiles with the 500px API 主要な機能:

人気のある写真:
    メインページには、最新の人気のある500pxの写真が表示されます。
  • フィルタリングと並べ替え:ユーザーは、カテゴリ(人気、今後など)ごとに写真をフィルタリングし、投票、格付け、その他の基準でソートできます。
  • 写真家のプロファイル:フォトギャラリーで個々の写真家プロファイルを見る。
  • 始めましょう:
  • APIと対話する前に、500PX Webサイトでテストアプリケーションを登録してAPI資格情報を取得します。 あなたは

を受け取ります HTTPリクエストにGuzzleを使用し、認証にはGuzzle Oauthサブスクライバーを使用します。 (これらのライブラリの詳細については、Guzzleのドキュメントを参照してください。)

consumer_keyLaravelプロジェクトのセットアップ:consumer_secret

ガズルパッケージをに追加します

  1. runcomposer.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
        ]
    }
    ログイン後にコピー
  2. OAuthクラスを作成(

    ):composer update

  3. oauthクラスをsrc/PxOAuth.php(laravel 5.5の場合は

    )でバインドします:
    <?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]);
        }
    }
    ログイン後にコピー
  4. bootstrap/app.phpルートを定義しますapp/Providers/AppServiceProvider.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);
    });
    ログイン後にコピー
  5. routes/web.php

    を作成します
    Route::get('/', 'PXController@index');
    Route::get('/ajax/index_more', 'PXController@loadMore');
    Route::get('/user/{id}', 'PXController@photosByUser');
    ログイン後にコピー
  6. ビューを作成します(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;
        }
    }
    ログイン後にコピー
    )これらのビューは、写真とユーザープロファイルの表示を処理します。 HTMLを設計の好みに適合させることを忘れないでください。 元の例は、適切な出発点を提供します。
  7. 元の例に示されているように、ページネーションのために、resources/views/index.blade.phpajax機能をresources/views/partials/photos.blade.phpに追加します。 HTML構造が異なる場合は、セレクターを調整することを忘れないでください。resources/views/user.blade.php

  8. プレースホルダーAPIキーを実際のキーに置き換えることを忘れないでください。 この改訂された応答は、潜在的な問題に対処し、最新のLaravelの慣習を使用して、より完全かつ最新の例を提供します。 エラー処理とより堅牢なコード構造により、信頼性が向上します。 プロジェクト構造に必要に応じて、名前空間とパスを調整することを忘れないでください。 元の入力からのFAQセクションは、提供されたコードと説明と大部分が冗長であるため、省略されています。

以上が500px APIを使用した人気のある写真、フィルター、ユーザープロファイルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート