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

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

ただいまの
回答率

91.24%

  • Twitter

    475questions

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

  • Go

    353questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

twitter APIで"Invalid or expired token."と言われてしまう( ; ;)

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 271

DDxlk

score 103

環境

golang
anaconda

やったことと問題

twitter APIを使ったプログラムを動かしてしばらくすると、以下のエラーが出ます

Get https://api.twitter.com/1.1/friendships/create.json returned status 401, {"errors":[{"code":89,"message":"Invalid or expired token."}]}

これは、認証トークンの有効期限が切れるのが問題とありましたが、具体的にどう直せばいいのかわかりません...

例えば以下のコードは、片思いユーザー(こちらがフォローしているがフォローを返されていないユーザー)をリムーブするコードです
以前mattnさんに回答していただいたコードが入っています

package main

import (
    "github.com/ChimeraCoder/anaconda"
    "time"
    "fmt"
    "log"
)

var api *anaconda.TwitterApi

func main() {
    api = createApi()
    t := getRemoveTarget()
    remove(t)
}

//getRemoveTargetでリスト化したユーザーを1秒間隔でリムーブ
func remove(t []int64)  {
    for _, i := range t {
        _, err := api.UnfollowUserId(i)
        if err != nil {
            fmt.Println(err)
            break
        }
        time.Sleep(1000 * time.Millisecond)
    }
}

//片思いを見つける
func getRemoveTarget() []int64 {
    f, err := api.GetFriendsIds(nil)
    if err != nil {
        log.Println(err)
    }

    fed, err := api.GetFollowersIds(nil)
    if err != nil {
        log.Println(err)
    }

    return filter(f.Ids, fed.Ids)
}

func filter(lhs, rhs []int64) []int64 {
    m := map[int64]int{}

    for _, v := range lhs {
        if _, ok := m[v]; !ok {
            m[v] = 1
        }
    }

    for _, v := range rhs {
        if _, ok := m[v]; ok {
            m[v] = 2
        }
    }

    var ret []int64

    for i := range m {
        if m[i] == 1 {
            ret = append(ret, i)
        }
    }
    return ret
}

//apiつくる
func createApi() *anaconda.TwitterApi {
    anaconda.SetConsumerKey("CK")
    anaconda.SetConsumerSecret("CS")
    api := anaconda.NewTwitterApi("AT", "AS") 
    return api
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

API 制限に引っかかっているのではないでしょうか。現象が出る理由としては

  • anakonda がバグっている
  • 同じ accessToken/accessSecret のペアを他で使いまわしている

などがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 12:22

    anacondaのissuesに同様のものは見つけられませんでしたし、もちろんペアは使い回していないので、謎ですね

    キャンセル

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

ただいまの回答率

91.24%

関連した質問

  • 解決済

    ツイートの投稿

    大学で卒業研究としてTwitterAPIを利用したアプリケーションを開発しています。 その過程で以下のようにツイート投稿のところで行き詰まりました。 同じようなコードでタイムラ

  • 解決済

    Swift, SpriteKitでTwiterにスクリーンショットの画像を投稿する

    こんばんは。いつもお世話になっています。早速質問させていただいます。 タイトル通りの質問なのですが、既に同じ様な質問が出ていて、そちらを参考にさせてもらっているのですが、 分か

  • 受付中

    ストラクトで受け取った値を別のストラクトに受け渡すには?

    このストラクトにjsonで返ってきた値をしたのストラクトに当てはめ、値を更新したい. ちょっとでもわかる人いたらお願いします。本当至急です。 本当にわからないのでお願いします。

  • 受付中

    go言語でタイマーAPIの作成について

    Go言語と、Framework [echo]を利用してAPIを作成しております。 特定のデータごとのタイマーを、Web APIを利用して実装したいと考えております。 処理の

  • 解決済

    Go言語で<div>~</div>で入れ子になったデータを抜き出すには

    以下のように<div>~</div>で入れ子になったリストがあるHTMLのページからデータを抜き出したいのですが、方法が分かりません。 xmlパッケージを使えば解決できるようで

  • 解決済

    Go言語のshort variable declarationの挙動が分かりません。

    Go言語の:=は変数宣言の短い書き方だと思っていたのですが、以下のコードのように変数errが二度:=で初期化されてるにも関わらずエラーが起きない理由を教えてください。 res,

  • 解決済

    golangでpostできない理由を教えてください

    goでpostするformを作成しています。その中で、htmlは表示されるのですが、送信した後の処理がうまく行きません。どのように変更すれば、良いかわからないので、よろしくお願いし

  • 解決済

    Golangのanacondaでユーザー認証をしたい

    anacondaを使って、ユーザー認証をした上で処理をしたいです。 anaconda.AuthorizationURL()を使って云々...というような処理なのですが、いかんせ

同じタグがついた質問を見る

  • Twitter

    475questions

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

  • Go

    353questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。