首頁 >後端開發 >php教程 >具有500px API的流行照片,過濾器和用戶配置文件

具有500px API的流行照片,過濾器和用戶配置文件

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-02-18 08:37:11830瀏覽

探索500px API:構建Laravel Showcase App

>本文展示了構建一個小的Laravel應用程序,展示了500px API。 我們將創建一個應用程序以顯示流行的照片,應用過濾器和訪問攝影師配置文件。

>

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

密鑰功能:

  • >流行照片:主頁顯示最新流行的500px照片。
  • 過濾和排序:>用戶可以按類別(流行,即將到來的等)過濾照片,然後按票數,評分和其他條件進行排序。
  • >
  • 攝影師概況:查看帶有照片庫的個人攝影師概況。

入門:

在與API互動之前,請通過在500px網站上註冊測試申請,從而獲得API憑據。 您將收到

consumer_keyconsumer_secret>我們將使用guzzle進行HTTP請求,而Guzzle Oauth訂戶進行身份驗證。 (有關這些庫的詳細信息,請參閱Guzlezle文檔。)

>

設置Laravel項目:

>

    >將guzzle軟件包添加到您的
  1. >:

    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>
  2. >運行
  3. composer update

  4. 創建一個oauth類(
  5. ):

    > 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>
  6. 中綁定oauth類(或> 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>
  7. 中定義路由:
  8. >

    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>
    創建
  9. >:
  10. 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>
    創建視圖(
  11. )這些視圖將處理照片和用戶配置文件的顯示。 請記住將HTML適應您的設計偏好。 原始示例提供了一個很好的起點。 resources/views/index.blade.php resources/views/partials/photos.blade.php resources/views/user.blade.php 如原始示例所示,

    >為分頁>
  12. 添加了AJAX功能。 請記住,如果您的HTML結構有所不同,請調整選擇器。
  13. >

    index.blade.php

    記住用您的實際鍵替換佔位符API鍵。 這種修訂的響應提供了一個更完整和最新的例子,解決了潛在問題並使用現代的Laravel慣例。 錯誤處理和更強大的代碼結構提高了可靠性。 請記住,根據需要調整項目結構的名稱空間和路徑。 原始輸入的FAQ部分已被省略,因為它在很大程度上是用提供的代碼和解釋的多餘的。

以上是具有500px API的流行照片,過濾器和用戶配置文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn