twitter-api.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient, HttpHeaders } from '@angular/common/http';
  3. import { Storage } from '@ionic/storage';
  4. import CryptoJS from 'crypto-js';
  5. @Injectable()
  6. export class TwitterApiProvider {
  7. consumer_key: string = 'UxZkbKotkr8Uc6seupnaZ1kDE';
  8. consumer_secret: string = 'fEAas8iugR60FOEXsFG0iajq6oyfIIXRBVMlTgWxBd1stWIKHq';
  9. access_token_key: string;
  10. access_token_secret: string;
  11. client;
  12. constructor(public http: HttpClient, private storage: Storage) {
  13. console.log('Hello TwitterApiProvider Provider');
  14. Promise.all([this.storage.get('accessTokenKey'), this.storage.get('accessTokenSecret')]).then(values => {
  15. this.access_token_key = values[0];
  16. this.access_token_secret = values[1];
  17. this.initApi();
  18. });
  19. }
  20. initApi() {
  21. }
  22. private buildHeaders(): HttpHeaders {
  23. let oauth_consumer_key = this.consumer_key;
  24. let oauth_nonce = this.getNonce();
  25. let oauth_signature = this.getSignature('get', 'https://api.twitter.com/1.1/statuses/home_timeline.json', '');
  26. let oauth_signature_method = 'HMAC-SHA1';
  27. let oauth_timestamp = Math.floor(Date.now() / 1000).toString();
  28. let oauth_token = this.access_token_key;
  29. let oauth_version = '1.0';
  30. let authToken = `OAuth oauth_consumer_key="${oauth_consumer_key}", oauth_nonce="${oauth_nonce}", oauth_signature="${oauth_signature}", oauth_signature_method="${oauth_signature_method}", oauth_timestamp="${oauth_timestamp}", oauth_token="${oauth_token}", oauth_version="${oauth_version}"`;
  31. console.log(authToken);
  32. return new HttpHeaders({
  33. 'Authorization': authToken
  34. });
  35. }
  36. private getNonce(numChars = 32): string {
  37. var st = "0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz";
  38. var l = st.length;
  39. var result = "";
  40. for (var i = 0; i < numChars; i++) {
  41. var randomIndex = Math.floor(Math.random() * l);
  42. result = result + st.charAt(randomIndex);
  43. }
  44. return result;
  45. }
  46. private getSignature(method: string, url: string, parameterString: string): string {
  47. let shaKey = encodeURIComponent(this.consumer_secret) + "&" + encodeURIComponent(this.access_token_secret);
  48. let signatureBaseString = `${method.toUpperCase()}&${encodeURIComponent(url)}&${encodeURIComponent(parameterString)}`;
  49. let signature = CryptoJS.HmacSHA1(signatureBaseString, shaKey);
  50. return CryptoJS.enc.Base64.stringify(signature);
  51. }
  52. fetchHomeFeed() {
  53. return this.http.get('https://api.twitter.com/1.1/statuses/home_timeline.json', { headers: this.buildHeaders() });
  54. }
  55. }