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

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

ただいまの
回答率

90.35%

  • Swift

    7632questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Twitter

    696questions

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

  • OAuth

    112questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

[swift]OAUth1.0でTwitter APIが認証されない

受付中

回答 0

投稿

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

chNOBUNAGA

score 31

OAuth1.0でTwitterAPIを利用しようとしていますが、どうも認証エラーがでます。

 //get trend
    public class trend_get{
        public var trends=[Trend]()

        let time:Int = Int(NSDate().timeIntervalSince1970)

        public func loadData(reset: Bool=false){

            var api_key = "APIキー";    // APIキー
            var api_secret = "APIシークレット";    // APIシークレット

            var id="1110809"  //ID

            let request_url="https://api.twitter.com/1.1/trends/place.json?id=1110809"

            //署名用キー作成
            let api_encode=urlEncode(string: api_key)
            let api_secret_encode=urlEncode(string: api_secret)

            let key=api_encode + "&" + api_secret_encode
            let data=urlEncode(string: "id=" + id)          //データ部分
            let method=urlEncode(string: "POST")
            let request_url_encode=urlEncode(string: request_url)

            let signature_data=method+"&"+request_url_encode+"&"+data

            let signature=signature_data.hmac(algorithm: .SHA1, key: key)


            let datas: Data = signature.data(using: .utf8)!
            // オプション無しだと明示したい場合(rawValueよりこっちを推奨)
            let signatures=datas.base64EncodedString(options: [])



            let params=["screen_name":"takapon_jp"]
            /*API開始通知 */
            NotificationCenter.default.post(name: .TrendLoadStart, object: nil)

            if let url = URL(string: request_url) {
                var urlRequest = URLRequest(url: url)
                urlRequest.httpMethod = HTTPMethod.post.rawValue

                var headers: HTTPHeaders
                if let existingHeaders = urlRequest.allHTTPHeaderFields {
                    headers = existingHeaders
                } else {
                    headers = HTTPHeaders()
                }


                headers["Authorization"]="OAuth"
                headers["oauth_consumer_key"]=api_key
                headers["oauth_nonce"]=time.description
                headers["oauth_signature_method"]="HMAC-SHA1"
                headers["oauth_timestamp"]=time.description
                headers["oauth_token"]=api_secret
                headers["oauth_version"]="1.0"
                headers["oauth_signature"]=signatures



                print(headers)
                urlRequest.allHTTPHeaderFields = headers
                let request = Alamofire.request(urlRequest)
                    .responseJSON { response in
                        debugPrint(response)
                }
                debugPrint(request)
            }


        }
}

func urlEncode(string: String) -> String {
    return string.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

  • Swift

    7632questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Twitter

    696questions

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

  • OAuth

    112questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。