質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

2912閲覧

Arduino 自動でツイート エラー404の原因は?

horisuke3232

総合スコア109

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2015/09/23 12:38

自動で気温をツイートするものを作りたいと思い、

http://arms22.blog91.fc2.com/blog-entry-296.html

を参考に、メッセージの送信を試した所、 failed : code 404
が出てしまいます。

ネットワークの異常かなと思い、arduinoイーサネットに接続されているIPアドレスを調べるために、

http://garretlab.web.fc2.com/arduino_reference/libraries/standard_libraries/Ethernet/EthernetClass/localIP.html

の方法で試した所、IPアドレスがかえってきました。

何が原因で404が出るのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

自分は Arduino を持っていないので未確認ですが…

念のために確認致しますけれども「EthernetDNSライブラリ」はインストール済みでしょうか?

horisuke3232さんがご参考になさった記事では OAuthを使ってつぶやく「Stewitter」ライブラリの使用例が記載されていますが、このライブラリのベースになっている「NeoCatさん作」のライブラリのOAuth対応版では、DNSライブラリが必要であると書かれています。

OAuth対応Arduino用Twitterライブラリ

使い方は前のライブラリと変わっていませんが、DNSを引くために EthernetDNSライブラリが別途必要になっています。

ひょっとしたら、URLのドメイン名の名前解決ができずにアクセスエラーになっているのかもしれません。

投稿2015/09/23 15:13

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horisuke3232

2015/09/24 11:25

回答ありがとうございました。 上記リンクに記載しているところで、トークンを取得し、変更したところ無事自動ツイートできました。 トークン取得場所に問題があったんでしょうか? 今回取得のトークンと以前のトークンは別でした。
pi-chan

2015/09/25 04:12

horisuke3232さんが最初に取得されたトークンは「StewGateU」というプロキシが発行したもので、後から再取得されたものはTwitterから直接発行されたもののようですね… 良くは分からないのですが、解決して何よりです!
guest

0

トークンは自分で取得したものを使用していますか?
もしそうであれば、Arduinoがネットワークに正常に接続できていない可能性があります。

404エラーとはサイトにアクセスした時、サーバーにデータが無い場合に返されるエラーコードです。

投稿2015/09/23 12:54

come25136

総合スコア258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horisuke3232

2015/09/23 12:57

回答ありがとうございます。 トークンは自分で取得したものを使いました。 DHCPでやっているんですが、上記の方法で確認すると、IPアドレスがかえってきます。 ハード側の問題でしょうか?
come25136

2015/09/23 13:03

こちらの方法とエラーが発生するコードを見比べて、温度を取得せずにTwitterへツイートするコードを作成してください。 http://www.ct-robo.sakura.ne.jp/105 本当はコードを載せたいのですがArduinoを持っていないため動作確認が出来ないので必ず成功するコードは載せれません。(_ _)
horisuke3232

2015/09/23 13:17

温度を取得しないでのツイート試しました tweet is "aratana lab is 213.8 ℃ #shikarduino" connecting ... HTTP/1.0 403 Forbidden Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Date: Wed, 23 Sep 2015 13:16:11 GMT Server: Google Frontend Content-Length: 28 Error 403 - token is invalidfailed : code 403 tweet is "aratana lab is 123.5 ℃ #shikarduino" connecting ... HTTP/1.0 403 Forbidden Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Date: Wed, 23 Sep 2015 13:17:12 GMT Server: Google Frontend Content-Length: 28 Error 403 - token is invalidfailed : code 403 となってしまいます。
come25136

2015/09/23 13:23

token is invalidfailed トークンが無効です認証に失敗しました。って感じのエラーが出てますので、 トークンをもう一度取得し直してみてください。
horisuke3232

2015/09/23 13:30

一度トークンを消去して再取得しましたが、同じエラーとなりました。 以前使っていた、Twitterアカウントに切り替えて、トークンを取得し試してみましたが、こちらも同様でした。
horisuke3232

2015/09/23 13:41 編集

プログラムは以下です #include <Twitter.h> #include <Stewitter.h> #include <SPI.h> // needed in Arduino 0019 or later #include <Ethernet.h> // The includion of EthernetDNS is not needed in Arduino IDE 1.0 or later. // Please uncomment below in Arduino IDE 0022 or earlier. //#include <EthernetDNS.h> // Ethernet Shield Settings byte mac[] = {  設定値 }; // If you don't specify the IP address, DHCP is used(only in Arduino 1.0 or later). byte ip[] = {  設定値  };//ipを指定してください。 // Your Token to Tweet (get it from http://arduino-tweet.appspot.com/) Twitter twitter(" 設定値 "); // Message to post //char msg[] = "Hello, World! I'm Arduino!"; void setup(){ Ethernet.begin(mac, ip); // or you can use DHCP for autoomatic IP address configuration. // Ethernet.begin(mac); Serial.begin(9600); } void loop(){ delay(60000);//1分感覚で温度を調査してツイートします。 float a0 = analogRead(A0); float xV = (5*a0)/1024; int intV = xV * 100;//整数部 int decV = int(xV * 1000) % 10;//小数点部 String strMsg = String("aratana lab is "); strMsg += intV; strMsg += "."; strMsg += decV; strMsg += " ℃"; strMsg += " #shikarduino"; Serial.println("tweet is \""+strMsg+"\""); char msg[255]; strMsg.toCharArray(msg, 255); Serial.println("connecting ..."); if (twitter.post(msg)) { // Specify &Serial to output received response to Serial. // If no output is required, you can just omit the argument, e.g. // int status = twitter.wait(); int status = twitter.wait(&Serial); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); Serial.println(status); } } else { Serial.println("connection failed."); } }
come25136

2015/09/23 13:41

アクセストークンは伏せてください!! これがあると、いろんな人がhorisuke3232さんのtwitterアカウントでツイートできます。
come25136

2015/09/23 13:44 編集

#include <SPI.h> #include <Ethernet.h> #include <Stewitter.h> // MACアドレス(Ethernetシールドの裏に記載されているのに変更) byte mac[] = { mac address }; // "YourToken"を自分ものに変更 Stewitter twitter("YourToken"); //メッセージ char msg[] = "Hello world , I'm Arduino ! "; void setup(){ delay(1000); Ethernet.begin(mac); Serial.begin(9600); if (twitter.post(msg)) { int status = twitter.wait(); if (status == 200) { Serial.println(twitter.response()); } else { Serial.print("failed : code "); Serial.println(status); } } else { Serial.println("connection failed."); } } void loop(){ } 試してみてください。
horisuke3232

2015/09/23 14:00

failed : code 404 が出ました
come25136

2015/09/23 14:06 編集

Twitterサーバー <--> ルーター <--> Arduino          ↑ここ もしくは↑ここで何か問題が発生している用に思えます。 申し訳ありませんが、色々と考えた結果解決策が見つかりませんでした。 すみません(_ _)
horisuke3232

2015/09/23 14:10

すみません。色々ありがとうございました。他にも調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問