栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Flutter(Dart 2)访问Twitter GET API

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter(Dart 2)访问Twitter GET API

这是最终工作的代码:

生成字符串方法:

static String generateSignature(      String method, String base, List<String> sortedItems) {    String param = '';    for (int i = 0; i < sortedItems.length; i++) {      if (i == 0)        param = sortedItems[i];      else        param += '&${sortedItems[i]}';    }    String sig =        '$method&${Uri.enpreComponent(base)}&${Uri.enpreComponent(param)}';    String key =        '${Uri.enpreComponent(_secretKey)}&${Uri.enpreComponent(twitter.secret)}';    var digest = Hmac(sha1, utf8.enpre(key)).convert(utf8.enpre(sig));    return base64.enpre(digest.bytes);  }

Twitter接听电话的便捷方法:

Future<http.Response> _twitterGet(      String base, List<List<String>> params) async {    if (twitter == null) await _startSession();    String oauthConsumer =        'oauth_consumer_key="${Uri.enpreComponent(_consumerKey)}"';    String oauthToken = 'oauth_token="${Uri.enpreComponent(twitter.token)}"';    String oauthNonce =        'oauth_nonce="${Uri.enpreComponent(randomAlphaNumeric(42))}"';    String oauthVersion = 'oauth_version="${Uri.enpreComponent("1.0")}"';    String oauthTime =        'oauth_timestamp="${(DateTime.now().millisecondsSinceEpoch / 1000).toString()}"';    String oauthMethod =        'oauth_signature_method="${Uri.enpreComponent("HMAC-SHA1")}"';    var oauthList = [      oauthConsumer.replaceAll('"', ""),      oauthNonce.replaceAll('"', ""),      oauthMethod.replaceAll('"', ""),      oauthTime.replaceAll('"', ""),      oauthToken.replaceAll('"', ""),      oauthVersion.replaceAll('"', "")    ];    var paramMap = Map<String, String>();    for (List<String> param in params) {      oauthList.add(          '${Uri.enpreComponent(param[0])}=${Uri.enpreComponent(param[1])}');      paramMap[param[0]] = param[1];    }    oauthList.sort();    String oauthSig =        'oauth_signature="${Uri.enpreComponent(generateSignature("GET", "https://api.twitter.com$base", oauthList))}"';    return await http        .get(new Uri.https("api.twitter.com", base, paramMap), headers: {      "Authorization":          'Oauth $oauthConsumer, $oauthNonce, $oauthSig, $oauthMethod, $oauthTime, $oauthToken, $oauthVersion',      "Content-Type": "application/json"    }).timeout(Duration(seconds: 15));  }

示例调用:

Future<User> getUser(String tag) async {    String base = '/1.1/users/show.json';    final response = await _twitterGet(base, [      ["screen_name", tag],      ["tweet_mode", "extended"]    ]);    if (response.statusCode == 200) {      try {        return User(json.depre(response.body));      } catch (e) {        print(e);        return null;      }    } else {      print("Error retrieving user");      print(response.body);      return null;    }  }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号