web-dev-qa-db-ja.com

エラー404を取得するAPIリクエストを取得しようとしています

私はweedmapsというウェブサイトから場所のリストを取得しようとしています。これは私が使っているコードです:

function call_for_api() {


    $url='https://api-v2.weedmaps.com/api/v2/listings';
    $response = wp_remote_post( $url, array(
        'timeout' => 45,
        'redirection' => 5,
        'httpversion' => '1.0',
        'blocking' => true,
        'headers' => array('accept'=>'application/json','accept-encoding' => 'gzip, deflate, br','connection' =>'keep-alive'),
        'body' => null,
        'cookies' => array(),
        'compress'    => false,
            'decompress'  => true,
            'sslverify'   => true,
            'stream'      => false,
            'filename'    => null,  
        'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'
                )
        );

    if ( is_wp_error( $response ) ) {
         $error_message = $response->get_error_message();
        echo "Something went wrong: $error_message";
    } else {
         echo 'Response:<pre>';
         print_r( $response );
             echo '</pre>'; 
 echo wp_remote_retrieve_body( $response );

    }
}

function cf_shortcode() {
    ob_start();
    call_for_api();

    return ob_get_clean();
}

add_shortcode( 'weed-list', 'cf_shortcode' );

Weedmapsのマップページを見ているときcomと私のネットワークタブを見るこれは正しいエンドポイントのようです。私はwp_remote_postがどのように機能するかについて何かを逃したと思います。

私はapiで404を見たことがありませんが、私はそれに少し新しいです。

それは私が電話をかけたように見えますが、多分apiの専門家は私がここで間違ったことを見ています。

これは私が得るエラーメッセージです:

Array
(
    [headers] => Requests_Utility_CaseInsensitiveDictionary Object
        (
            [data:protected] => Array
                (
                    [access-control-allow-credentials] => true
                    [access-control-allow-methods] => GET, POST, PUT, DELETE, OPTIONS
                    [access-control-allow-Origin] => https://weedmaps.com
                    [access-control-expose-headers] => 
                    [access-control-max-age] => 1728000
                    [content-type] => application/json; charset=UTF-8
                    [date] => Thu, 27 Jul 2017 04:37:10 GMT
                    [server] => nginx/1.4.6 (Ubuntu)
                    [vary] => Origin
                    [x-request-id] => 80e789df-9a6b-47af-9358-5b54626551e9
                    [x-runtime] => 0.008710
                    [content-length] => 34
                )

        )

    [body] => {"status":404,"error":"Not Found"}
    [response] => Array
        (
            [code] => 404
            [message] => Not Found
        )
2
rudtek

POSTリクエストの代わりにGETリクエストを使用してみてください。ヘッダーはPOSTリクエストでweedmaps.comからのOriginのみを許可することを示します。 WordPressのメソッドは wp_remote_get() です。

    function call_for_api() {
        $url='https://api-v2.weedmaps.com/api/v2/listings';
        $response = wp_remote_get( $url,
            array(
                'timeout'     => 45,
                'redirection' => 5,
                'httpversion' => '1.0',
                'blocking'    => true,
                'headers'     => array(
                    'accept'          => 'application/json',
                    'accept-encoding' => 'gzip, deflate, br',
                    'connection'      =>'keep-alive'
                ),
                'body' => null,
                'cookies'     => array(),
                'compress'    => false,
                'decompress'  => true,
                'sslverify'   => true,
                'stream'      => false,
                'filename'    => null,  
                'user-agent'  => 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
            )
        );

        if ( is_wp_error( $response ) ) {
            $error_message = $response->get_error_message();
            echo "Something went wrong: $error_message";
        } else {
            echo 'Response:<pre>';
            print_r( $response );
            echo '</pre>'; 
            echo wp_remote_retrieve_body( $response );
        }
}

function cf_shortcode() {
    ob_start();
    call_for_api();

    return ob_get_clean();
}

add_shortcode( 'weed-list', 'cf_shortcode' );
3
Tim Elsass