前提・実現したいこと
SwiftでTwitterAPIを使ってツイートのJSONデータを受け取り、Xcodeのデバッグエリアのコンソール部分にprint関数で表示させたい。
ここに質問の内容を詳しく書いてください。
SwiftとXcodeでTwitterAPIからJSONデータを受け取り、print関数でタイムラインを出力したいと思っています。
Twitterへのログインまではできたのですが、タイムラインのデータ出力はこれでできるだろうと思っていたコードでエラーが出てしまう状況なので、エラーを解消し、タイムラインのデータをprint関数で出力する方法をご教示いただきたいと思います。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
SwiftでTwitterAPIのエンドポイントからJSONデータを受け取り、print関数で出力するだけのアプリを作っています。ビルドするとTwitterのログインの手続きが始まりログインできるのですが、取得したデータを出力させるところでエラーが出ます。また、出力させたデータがみんなnilになってしまいます。
発生している問題・エラーメッセージ
code = 215; message = "Bad Authentication data.";
該当のソースコード
Swift
1import UIKit 2import Swifter 3import SafariServices 4import Alamofire 5import Accounts 6import Social 7import OAuthSwift 8 9struct Const { 10 static let consumerKey = "xxxxxxxxxxxxxxxxxxxxxxxxx" 11 static let consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 12} 13 14class ViewController: UIViewController, SFSafariViewControllerDelegate { 15 16 var screenName = "xxxxxxxx" 17 var tweetCount = 5 18 var twAccount = ACAccount() 19 var oauthswift: OAuthSwift? 20 21 let headers:HTTPHeaders = ["Authorization": "AAAAAAAAAAAAAAAAAAAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 view.backgroundColor = .red 26 // Do any additional setup after loading the view. 27 login() 28 } 29 30 31 func login() { 32 let TWITTER_CONSUMER_KEY = Const.consumerKey 33 let TWITTER_CONSUMER_SECRET = Const.consumerSecret 34 35 let swifter = Swifter(consumerKey: TWITTER_CONSUMER_KEY, consumerSecret: TWITTER_CONSUMER_SECRET) 36 37 swifter.authorize( 38 withCallback: URL(string: "swifter-xxxxxxxxxxxxxxxxxxxxxxxxx://")!, 39 presentingFrom: self, 40 success: { accessToken, response in 41 print("ログイン成功") 42 self.getTimeline() 43 }, failure: { error in 44 print(error) 45 }) 46 47 } 48 49 // タイムラインを取得する 50 func getTimeline() { 51 52 // APIコールを実行 53 let urlText = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=\(screenName)&count=\(tweetCount)" 54 55 //Getメソッドでツイート取得 56 AF.request(urlText, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in 57 58 switch response.result{ 59 case .success: 60 print(response)//・・・ここでresponseがBad Authentication Dataになってしまう。 61 for i in 0..<self.tweetCount{ 62 let json:JSON = JSON(response.data as Any) 63 //ツイート 64 let text = json[i]["text"].string ?? "nil"//・・・ここで必ずnilになってしまう。 65 print(text) 66 } 67 break 68 69 case .failure(let error): 70 print(error) 71 break 72 } 73 } 74 } 75} 76
試したこと
SwifterDemoiOSを流用したらできたのですが、SwifterDemoiOSはコピペしてエラーを当てずっぽうで修正しただけなので分かって書いたわけではありません。また、エンドポイントのパラメータをいじるなどしてデータを扱えるようになりたいです。
ここに問題に対して試したことを記載してください。
「Bad Authentication data. 215」とか「TwitterAPI JSON ツイート 取得」などいろいろ検索して、検索先のサイトも一通り見たのですが、エラーの解消法は分かりませんでした。
リクエストを送る際のヘッダー情報が足りていないのかも知れないと思ったのですが、タイムラインのデータを取得するのに必要なヘッダー情報が何なのかも分かりません。
補足情報(FW/ツールのバージョンなど)
Xcode11.6
iphoneSE13.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。