2016-05-24 3 views
1

私は短縮URLを作成する機能を持つウェブサイトを持っています。 URL短縮を処理するために、私はYOURLS(オープンソースのURL短縮ツール)を使用しています。これは私の別のサーバーで実行し、2つのサイトをAPI呼び出しで接続します。YOURLS特定のMySQLカラムのAPI呼び出しをフィルタリングするプラグイン

私は、ユーザーが短いURLを作成するときに、以下に示すように、それはyourls_urlテーブルに私のウェブサイトから自分のユーザーIDを添付しますいくつかのカスタムAPI actionsYOURLS pluginを作成しました:

enter image description here

すると、ユーザ"My Links"ページを訪問するそのユーザーが作成したすべての短いURLを返すAPI呼び出しを行う必要があります。これを行うには、「api_result_stats」のフィルタを作成するだけで簡単です。

これが唯一の指定されたユーザーが作成したURLを返すために仮定されて、私が作成したフィルタである:

yourls_add_filter('api_result_stats', 'separate_users_api_stats'); 

function separate_users_api_stats() { 
    global $ydb; 

    $user = (isset($_REQUEST['user']) ? $_REQUEST['user'] : ''); 

    $table = YOURLS_DB_TABLE_URL; 
    $result = $ydb->query("SELECT * FROM `$table` WHERE `user` = '" . $user . "'"); 

    return $result > 0; 

} 

はこれをテストするために、私はhttp://example.com/yourls-api.php?action=stats&user=test123&limit=10&filter=last&signature=xxxxxxxxxxを試すことができますが、残念ながら、私が受け取るすべては次のとおりです。

enter image description here

私はPHP/MYSQLにあまり慣れていないので、誰かが私が間違ってやっているかどうかについてのアイデアがあれば、私はかなり長い間これに取り組んできました。大いに感謝するiated!ここで

+0

こんにちはU54! PHPMyAdminを使用していることがわかります。トラブルシューティングの最初の手順は、実行するクエリがデータを返すかどうかを手動で確認することです。 SQLタブを開き、次のクエリを実行します。SELECT keyword FROM yourls_url WHERE user = 'test123';返された行がある場合はお知らせください。また、separate_users_api_stats()関数が返すものを変更することを検討することもできます。私は "return $ result> 0"は、データベースから行がある場合はTRUEを返し、そうでない場合はFALSEを返します。 – Matthew

+0

@Matthew返信いただきありがとうございます!私はクエリを実行し、すべてが正常に動作しているように見え、予想されるすべてのデータが返されました。 [ここ](https://github.com/YOURLS/YOURLS/blob/1481bef4ef0ad2686b80db1d9982e29df96086c8/includes/functions-api.php#L167)は私はseparate_users_api_statsフィルタを装着していYOURLSコードでyourls_api_stats関数です。 trueまたはfalseを返すことによって、これは私に、この場合、そのユーザーによって作成された行のみを返す「真」の行のみを返すことができると思いますか? – U54

+0

私はとても早く反応しなかったことを大変申し訳ありません!私はとても忙しかった。クエリがデータを返すので、関数がtrueまたはfalseを返すと、関数を呼び出した後にそのデータを取得できないことになります。 ** return $ result> 0; **はPHPに "結果を得ましたか?"と尋ねています。 PHPは「はい」と言っています。 だから、あなたはあなたが実際のデータをバック与えるのではなく、あなたのリターンラインにシンプルなはい/いいえの質問をしていることがわかります。関数を呼び出した後に実際のデータを取得するには、** return $ result; **に変更します。 – Matthew

答えて

1

は私のためにこれを解決するものである:

yourls_add_filter('api_result_stats', 'separate_users_api_stats'); 

function separate_users_api_stats() { 
    global $ydb; 

    $user = (isset($_REQUEST['user']) ? $_REQUEST['user'] : ''); 

    $table = YOURLS_DB_TABLE_URL; 

    $query = "SELECT * FROM `$table` WHERE `user` = '" . $user . "'"; 

    $result = $ydb -> get_results($query); 

    return $result; 

} 
関連する問題