API|退会専科 https://taikaisenka.com 退会手順のことなら退会専科へ! Sat, 17 Sep 2022 15:08:57 +0000 ja hourly 1 https://wordpress.org/?v=6.2.2 【Twitter API エラー解決】Application cannot perform write actions. Contact Twitter Platform Operations through https://help.twitter.com/forms/platform./code:261 https://taikaisenka.com/twitter-api-application-cannot-perform-write-actions-contact-twitter-platform-operations-through-https-help-twitter-com-forms-platform-code261/ https://taikaisenka.com/twitter-api-application-cannot-perform-write-actions-contact-twitter-platform-operations-through-https-help-twitter-com-forms-platform-code261/#respond Mon, 30 May 2022 22:25:32 +0000 https://taikaisenka.com/?p=751

こんにちは!ユウナです。

皆さんはTwitterが提供しているAPIを使っていますか?

やり方さえわかれば、誰でも簡単に使うことができます。

API利用申請~使用方法までについては、こちらが参考になります。(※別サイトに移動します)

【最新版】図解!実例あり!Twitter APIの申請方法 #note https://note.com/yuinami/n/n03f6c00dbcf8

TwitterAPIを利用する上でももちろん規約があり、1日でできる範囲が意外と厳しいです。

そんな中、私も利用制限に引っかかってしまいました。

試行錯誤しながらようやく解除できたので、備忘録を兼ねて解決策を紹介していこうと思います。

起きたエラー・制限内容

私は普段、PHPのフレームワーク「Laravel」を使ってTwitterAPIを利用しているのですが、ある日、こんな実行結果が返ってきたのです。

{“errors”:[{“message”:”Application cannot perform write actions. Contact Twitter Platform Operations through https://help.twitter.com/forms/platform.”,”code”:261}]}

直訳すると「アプリケーションは書き込みアクションを実行できません。httpsからTwitterプラットフォームオペレーションに連絡してください」ということでした。

Twitter開発者画面( https://developer.twitter.com/en/portal/projects/ )に行くとこのようなメッセージが出ていました。

この、オレンジ色の枠の部分です。(※スクショを取り忘れたので、イメージ図になります。)

指示されたように、メールを見てみました。

アプリケーションの停止のお知らせ

Twitterからのお知らせです。お客様のアプリ「XXXX」が凍結され、Twitter APIにアクセスできなくなったことをお知らせします。この凍結に異議申し立てをするには、APIポリシーサポートフォームをご覧ください。
凍結中は、Twitterの許諾なしに新しいアプリケーションを登録しないでください。そのような行為はTwitterの開発者ポリシーに違反しており、アプリケーションが永久凍結されることがあります(関連する開発者アカウントも同様です)。
よろしくお願いいたします。
Twitter APIポリシー

ということでした。

「凍結」という文字には焦りましたが、ここで対象になっているのは、あくまでも「TwitterAPIを利用する権利の凍結」でした。普通にツイートもできましたし、フォローアンフォローもできました。

ただ単に、APIを利用することができなくなった、という意味でした。

ユウナ

最悪、手でツイートすればいいしなぁ。と思いながらも、やっぱり自動化できるところはしたかったので、解除策を調べてみました。

解決策を調べてみる

まずは、このエラーメッセージで検索してみました。そしたらこの記事が分かりやすかったです。

TwitterAPIが凍結されて復活するまでの詳細なやりとり

「改善したから解除して欲しい」という内容を送り続けることで、解除できるそうです。

実際にやってみました。

解決策 実践

1.まず、Twitter APIポリシーサポートへ連絡する

https://help.twitter.com/ja/forms/platform

こちらにアクセスします。

すると下記のような画面になるので、問合せ項目を選びます。

私は、「アプリケーションが凍結されたか、制限されている」を選択しました。

2.次に、必要事項を入力する

  • Twitterユーザ名・・・@~~の部分
  • メールアドレス・・・Twitterに登録しているメールアドレス
  • アプリケーション名・・・下記図の①番
  • アプリケーションID・・・下記図の②番
  • コンシューマーキー・・・下記図の③番

必要事項入力の最後の部分です。

  • アプリケーションのURL・・・ここは何でもいいです。自前のサイトやブログがあるのなら、そのURLで結構です。
  • 発生している問題・・・下記参考欄の通りです。ぜひ参考にしてください。

「このアプリはTwitterのルールとポリシーに違反しています。その結果、特定の機能が制限されます。詳細が記載されたメールが@gm。comに送信されました。サポートが必要な場合は、サポートチケットを送信してください。」というメッセージがあり、APIを利用できません。利用規約を改めましたので、制限解除をお願い致します。

「発生している問題」欄は上記のように書いて、「送信」を押しました。

結果は、まだ解除されず…

1回目の解除連絡をしたときから、約12時間後に、このような文面のメールが届きました。

Thanks for reaching out. Your app was restricted for sending a large volume of unsolicited and/or repeat @mentions. This is prohibited by the Twitter Rules

Spam: You may not use the Twitter service for the purpose of spamming anyone. What constitutes “spamming” will evolve as we respond to new tricks and tactics by spammers. Some of the factors that we take into account when determining what conduct is considered to be spamming are:

  • if you send large numbers of unsolicited replies or mentions;
  • if you send large numbers of duplicate replies or mentions;

Note that this behavior is not allowed regardless of whether or not it is automated. Per the Automation Rules if you are sending automated @mentions the recipient or mentioned user(s) must have requested or have clearly indicated an intent on Twitter  to be contacted by you. 

As a next step please respond to this email listing the measures that you have taken to limit this behavior on your platform. 

Please let us know if you have any questions. 

Regards, 

Twitter Platform Operations 


お問い合わせいただきありがとうございます。アプリは、大量の未承諾および/または繰り返しの@メンションを送信することを制限されていました。これはTwitterのルールで禁止されています:

スパム:誰かにスパムを送信する目的でTwitterサービスを使用することはできません。 「スパミング」を構成するものは、スパマーによる新しいトリックや戦術に対応するにつれて進化します。どのような行為がスパムと見なされるかを判断する際に考慮に入れる要素のいくつかは次のとおりです。

  • 未承諾の返信や言及を大量に送信する場合。
  • 重複した返信や言及を大量に送信する場合。

自動化されているかどうかに関係なく、この動作は許可されないことに注意してください。自動化ルールに従って、自動化された@メンションを送信する場合、受信者または言及されたユーザーは、Twitterで連絡する意図を要求したか、明確に示している必要があります。

次のステップとして、プラットフォームでこの動作を制限するために行った対策をリストしたこのメールに返信してください。

ご不明な点がございましたらお知らせください。

よろしく、

Twitterプラットフォームの運用

そして私は、このメールに対して下記のように英語で送りました。

We have removed the automation feature from your application. Please unsuspend my account that is currently frozen.

訳すと【アプリケーションから自動化機能を削除しました。現在凍結されているアカウントの一時停止を解除してください。】という意味になります。

2回目の連絡の結果は…無事に解除されました!

2回目の連絡をした日から、約1日後、このようなメールが届きました。

Thanks for reaching out. Your app was restricted for sending a large volume of unsolicited and/or repeat @mentions. This is prohibited by the Twitter Rules

Spam: You may not use the Twitter service for the purpose of spamming anyone. What constitutes “spamming” will evolve as we respond to new tricks and tactics by spammers. Some of the factors that we take into account when determining what conduct is considered to be spamming are:

  • if you send large numbers of duplicate replies or mentions;
  • if you send large numbers of unsolicited replies or mentions;

Note that this behavior is not allowed regardless of whether or not it is automated. We have reactivated your app, but this behavior must stop. Going forward, only @mention users who have first @mentioned your account. Only include one @mention per user interaction. 

Regards, 

Twitter Platform Operations 


お問い合わせいただきありがとうございます。アプリは、大量の未承諾および/または繰り返しの@メンションを送信することを制限されていました。これはTwitterのルールで禁止されています:

スパム:誰かにスパムを送信する目的でTwitterサービスを使用することはできません。 「スパミング」を構成するものは、スパマーによる新しいトリックや戦術に対応するにつれて進化します。どのような行為がスパムと見なされるかを判断する際に考慮に入れる要素のいくつかは次のとおりです。

  • 重複した返信や言及を大量に送信する場合。
  • 未承諾の返信や言及を大量に送信する場合。

自動化されているかどうかに関係なく、この動作は許可されないことに注意してください。アプリを再アクティブ化しましたが、この動作を停止する必要があります。今後は、最初にあなたのアカウントに@言及した@メンションユーザーのみ。ユーザーインタラクションごとに1つの@メンションのみを含めます。

よろしく、

Twitterプラットフォームの運用

Twitter 開発者画面をみても、オレンジ色のエラーメッセージ枠が消えていました。

ユウナ

ネットで調べたら、解除までに10日かかった人や1ヶ月かかったなどの声がありましたのでちょっと身構えていましたが、幸い、2日足らずで解除してもらえました。ほっと一安心です。

結び

今回TwitterAPIで5分毎に15件の自動投稿をするプログラムを組んでいたことで、スパムアカウントと認定されてしまいました。

その結果、API利用が一時的に停止され、解除までに2かを費やしてしまったのが反省点です。

ですが、ここまでに紹介した内容を参考にすれば、解除できますので、落ち着いて対処していきましょう。

TwitterAPI公式サイトでも書いてありましたが、停止になったからといってその問題を解決しないまま、新しいアプリケーションを作ったり、Twitterアカウントを作ったりしないようにしてください。永久追放の危険性が高まりますので!

それでは、ルールを守って楽しくツイッターをしましょうね!

]]>
https://taikaisenka.com/twitter-api-application-cannot-perform-write-actions-contact-twitter-platform-operations-through-https-help-twitter-com-forms-platform-code261/feed/ 0
【ebay API】Token type in the Authorization header is invalidのエラー解決 https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/ https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/#respond Mon, 11 Oct 2021 12:57:48 +0000 https://taikaisenka.com/?p=440

こんにちは!ユウナです。

世界的ECサイトebayでは、developerに登録すると検索APIや出品API、出品削除APIなどさまざまな機能をプログラム上から使用することができます。

今回は、ebay APIを使用した際に出たエラー「Token type in the Authorization header is invalid」を解決する方法を紹介していきます。

※本稿では、PHPを使っています。他の言語でも似たような構文になるはずですので、参考にしてみてください。

ebay APIを使用するためには、developerプログラムに参加したり、下記記事のようにアラート&通知を設定したりする必要があります。

本稿では、それらの各種設定はすでに登録済みであり、実際にアプリケーションキーが発行され使用できる状態であることを想定しています。

そのため、developerへの登録方法やアラート&通知の設定方法などは他の記事をお読みくださいm(__)m

エラー内容

'{
  "errors" : [ {
    "errorId" : 1003,
    "domain" : "OAuth",
    "category" : "REQUEST",
    "message" : "Token type in the Authorization header is invalid:AgAAAA**AQAAA...",
    "longMessage" : "Token type in the Authorization header is invalid:AgAAAA**AQAAA..."
  } ]
}'

エラー番号1002が出た場合は、HTTPリクエストのheader内に認証キーがないことが原因です。本件と同じ方法で対処可能なので、解決方法の参考にしてみてください。

{
  "errors" : [ {
    "errorId" : 1002,
    "domain" : "OAuth",
    "category" : "REQUEST",
    "message" : "Missing access token",
    "longMessage" : "Access token is missing in the Authorization HTTP request header."
  } ]
}

やったこと/サンプルプログラム

今回私がやりたかったことは、ebay APIを使って、キーワード検索をすることです。

そのため、公式ドキュメント「Search」を読みながら、下記のように組みました。

    //検索API URL
    private const URL_SEARCH = 'https://api.ebay.com/buy/browse/v1/item_summary/search?q=254/s-p';

    function searchAPI(){
        $headers=[
            'Authorization:AgAAAA**..........',
        ];

        $ch = curl_init(self::URL_SEARCH);
        curl_setopt($ch, CURLOPT_HTTPHEADER,    $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $curlres = curl_exec($ch);
        curl_close($ch);
        
        var_dump($curlres);
    }

すると結果は「エラー内容」で示した通りになりました。

つまり、APIキーが違うといわれています。

解決策

  1. ヘッダーには bearer を設定する
  2. Auth’n Authではなく、OAuthキーを使用する

こちらの海外の記事がビンゴでした。とても助かりました。

Token type in the Authorization header is invalid,ebay api

ユウナ

ebayは海外発のサイトですのでやっぱり日本語サイトより英語圏サイトの方がQ&Aも充実してますね。

下記図をご覧ください。

developerサイトにログインして表示したUserTokensページです。

私は最初、「Auth’n Auth」を選択して表示されるキー(A始まり)を認証キーに設定していました。

しかし、「参考欄」に挙げた海外サイトでは、

Authorization: Bearer v^10#t^H5sI…. // your token

となっています。

つまり、そもそも使用するキーも違っていたのです。

「Bearerを付与」+「v始まりのキー(OAuth)」を使用することで、うまくいきました。

※OAuthは上記画像にある画面で、「Get OAuth Application Token」をクリックすることで表示されます。

解決後のプログラム

    //検索API URL
    private const URL_SEARCH = 'https://api.ebay.com/buy/browse/v1/item_summary/search?q=254/s-p';

    function 解決後(){
        $headers = [
            'Authorization: Bearer ' . 'v^1.1#........................,
        ];

        $ch = curl_init(self::URL_SEARCH);
        curl_setopt($ch, CURLOPT_HTTPHEADER,    $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $curlres = curl_exec($ch);
        curl_close($ch);
        var_dump($curlres);
    }

結果は以下の通りです。

{
  "href":"https://api.ebay.com/buy/browse/v1/item_summary/search?q=254%2Fs-p&limit=50&offset=0",
  "total":17,
  "next":"https://api.ebay.com/buy/browse/v1/item_summary/search?q=254%2Fs-p&limit=50&offset=50",
  "limit":50,
  "offset":0,
  "itemSummaries":[{"itemId":"v1|294431348446|0",
  "title":"Pokemon Crad Promo celebration fanfare CHAMPION SHIP SERIES 2021 254/S-P TCG  ",
  "image":{"imageUrl":"https://i.ebayimg.com/thumbs/images/g/CEYAAOSwFXphVug-/s-l225.jpg"},
  "price":{"value":"234.41",
  "currency":"USD"},
  "itemHref":"https://
  ... (中略)
}

ちゃんとデータが取れていることが分かりますね!

お疲れ様でした。

結び

ebayAPIは、もともとXML形式でリクエストすることができました。(XMLかSOAP形式)

ですが最近アップデートされて、XMLでのリクエストが非推奨になり、新しくREST API形式でのリクエスト手法に切り替わっていました。

確かにセキュリティ面や保守面、現在のWEB環境を踏まえるとこの移行は妥当なのかもしれませんね。

今後はどのAPIもRESTful形式での問い合わせが一般的になってくると思うので、headerに持たせる認証コードの書き方は覚えておくと、アドバンテージがあるかもしれません。

何はともあれ、私がしたかった実装ができたので、めでたしです!

少額でプログラミングを学ぶなら!【ココナラ】

ココナラは、一般の方が自身のスキルを公開して、手助けをするサービスです。

私も時々使っています。クラウドワークスでは企業案件もあるため、こちらが支払う金額も本格的な金額になってしまいます。

その反面、ココナラでは副業やちょっとしたお小遣い稼ぎのために自身のスキルを販売している層が多いため、比較的安価で悩みを解決してくれます。

今回のようにちょっとしたプログラムの一部改修をお願いするなら、おすすめなサービスです。


有料でプログラミングを学ぶなら!【テックアカデミー】

テックアカデミーでは、JavaやPHP、Swiftなどさまざまなプログラミング言語を取り扱っています。いろんなコースがあります。WEB作成やスマホアプリコースなど、プログラミングスクール業界随一です。

私も2016年10月から3か月コースで入校した経験があります。(その時は3ケ月で学費は約16万円ほどでした)

そこで身についた、「自分で検索して自己解決する力」と「トライ&エラーを繰り返してまずは手を動かしてみる」考え方が今でも活きています。

私も通った経験があるこのテックアカデミーは、授業内容も濃いですし、Lineに似たチャット(Slack)を使うことで講師の方といつでも会話することができます。

これから本格的なWEBサイトやスマホアプリを作っていきたいという方には、強くおすすめしています!

]]>
https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/feed/ 0
【eBayデベロッパーAPI】設定方法 exemption/Marketplace Account Deletion/Closure notifications https://taikaisenka.com/ebay-developer-api-setting/ https://taikaisenka.com/ebay-developer-api-setting/#respond Thu, 22 Jul 2021 01:07:57 +0000 https://taikaisenka.com/?p=135

こんにちは!ユウナです。

皆さんはeBayを使ったことありますか?世界最大級のマーケットプレイスとして25年以上続く、オークションサイトです。

このサイトを利用しているのは世界中に1億7000万人以上いるといわれている、とても規模がでかいサービスです。

ユウナ

私は時々不用品を売る時に使ったりしています

私はプログラミングが趣味なのですが、今回その勉強を兼ねて、ebayAPIを使ってみることにしました。

しかしebayAPIを使用するにあたって必要な設定や、疎通確認用のプログラム作成が必要になることが分かり、少し躓いたので、その手順を紹介していきます。

※すでにeBay開発者サイト(https://developer.ebay.com/)には登録してあると想定しています。未登録の場合は、上記リンクから登録してください。

課題:アプリケーションキーを発行しようとすると「subscribe to eBay Marketplace Account Deletion/Closure notifications or apply for an exemption」となる

eBayデベロッパープログラムに登録し、Appliation Keyを発行しようとすると下記図のような文言が出て、本番環境用のキー(Production)が発行できないことが分かります。

(※ごめんなさい。スクショ忘れたので事後画面です。。)

なぜそうなるかというと、簡単に言えば、eBay側が異常を察知したユーザアカウントを削除してほしいために、ちゃんと正しく連絡が取れる開発者であることを認証したいため、らしいです。

詳細は公式サイト⇒ https://developer.ebay.com/marketplace-account-deletion にありますので、興味があれば見てみて下さい。

さて、この承認を得られないとそもそもeBayのAPIを使うことができないので、何としても通過する必要があります!次の章で解説していますので、さっそく見ていきましょう。

解決手順

1.デベロッパープログラムにログインする

https://developer.ebay.com/からログインします。

「Sign in」>「Appliation access keys」

2.「Alerts & Notifications」タブを開き、各種設定する

https://developer.ebay.com/my/push?env=production&index=0へ行くか、「subscribe to eBay Marketplace Account Deletion/Closure notifications or apply for an exemption」リンクを押して、「アラート&通知」タブを開きます。

次に、下記図のように設定していきます。

  • Event Notification Delivery Method・・・Marketplace Account Deletionを選択
  • Email to notify if marketplace account deletion notification endpoint is down・・・自身のメールアドレスを入力します。
    ※ebay側に登録しているアドレスでなくても問題なかったです。Gmailでも可でした。
  • Marketplace account deletion notification endpoint・・・ebay側からGETリクエストが出されるので、その受信先のURLを入力します。
  • Verification token・・・32文字以上で大文字小文字数字、アンダーバー、ハイフンが入った文字列を入力します。

私が入力した値を参考までに紹介します。

  • ②メールアドレス・・・xxxxxxx@gmail.com
  • ③エンドポイント・・・https://(ドメイン).com/ebayApi/notificationsReceiver.php
  • 認証文字列・・・パスワード生成サイト(https://www.luft.co.jp/cgi/randam.php)で作りました。

メールアドレスを設定したら「Edit」を押して保存します。

エンドポイントと認識文字列を入力したら「Edit」を押して保存します。

3.ebay側からの受信用プログラムを作る

作り方はPHPでもJavaでもなんでも大丈夫です。要はebay側から送信されたGETリクエストに呼応するプログラムがあればいいだけですので!

細かく知りたい方はこちら⇒https://developer.ebay.com/marketplace-account-deletion英文ですが、ここから読めます。

以下に私が動かしたプログラムを載せておきますので、自由に使ってみてください。

<?php

header('HTTP/1.1 200 OK');
$endpointURL = 'https://(ドメイン).com/ebayApi/notificationsReceiver.php';
$verificationToken = '32文字以上の自由文字列(認証文字列)';

if(isset($_GET['challenge_code']))
{
    header('Content-Type: application/json');
    $d = $_GET['challenge_code'].$verificationToken.$endpointURL;
    $hd = array("challengeResponse"=>hash("sha256", $d));
    echo(json_encode($hd));

}

はい、これだけです。

簡単に解説すると、

「eBay will send a challenge code to that URL in the form of a GET call(EbayはチャレンジコードをGETメソッドによってコールします)」とあるので、GETによって来ることが分かります。

PHPでは$_GET[‘challenge_code‘]となりますね。

次に、「eBay with a 200 OK and the hashed value through a challengeResponse field in JSON format(応答コード:200 OKと、下記に示す並び順でハッシュ化した値をJSONにしてください)」とあるので、

header(‘HTTP/1.1 200 OK’);

header(‘Content-Type: application/json’);

$hd = array(“challengeResponse”=>hash(“sha256”, $d));

echo(json_encode($hd));

で表現しています。

最後に、JSONの並び順ですが、「challengeCode + verificationToken + endpoint.」とあるので

$d = $_GET[‘challenge_code’].$verificationToken.$endpointURL;

となります。

4.動作確認

ここまで出来たら、Ebayデベロッパープログラム側に戻り「Send Test Notifications」ボタンを押します。

すると、このようなGETパラメータが届きます。

challenge_code=123….049564…2a2

下記図のように「Marketplace account deletion notification endpoint settings successfully saved.」となれば、正常に認証されたということになります。

productionのアプリケーションキーも生成されていることが確認できますね。

お疲れ様でした。これで完了です!

海外のサイトですが、参考サイトも載せておきます。⇒https://forums.developer.ebay.com/questions/41792/computing-the-challengeresponse-for-the-marketplac.html

結び

英語の文書を読むことがまだまだ障壁に感じますが、Ebayは結構親切なサービスだと思います。

不親切なサービスだと、ここまで丁寧に書かれていないのでかなり試行錯誤してしまいます。

何はともあれ、これでEbayAPIを触ることができるようになりましたので、良かったです。

]]>
https://taikaisenka.com/ebay-developer-api-setting/feed/ 0