【问题标题】:Ionic4/Angular Post a tweet to TwitterIonic4/Angular 在 Twitter 上发布推文
【发布时间】:2020-03-05 03:41:08
【问题描述】:

我正在开发一个应用程序,我希望用户点击一个按钮并将推文发送到他/她的时间线。 有一些已知的方法可以使用 Node.JS 和 Angular 来做到这一点,但我正在寻找一种解决方案,以在不运行节点服务器的情况下实现我想要的。

有没有办法将 Twitter API 嵌入到您的 IONIC/Angular 应用程序中。而且我不是在寻找 Ionic 插件 TwitterConnect,因为它没有 POST 方法。

编辑

这里是 twitter 示例,但我将如何在 Angular 中实现它?

curl -XPOST 
  --url 'https://api.twitter.com/1.1/statuses/update.json?status=hello' 
  --header 'authorization: OAuth
  oauth_consumer_key="oauth_customer_key",
  oauth_nonce="generated_oauth_nonce",
  oauth_signature="generated_oauth_signature",
  oauth_signature_method="HMAC-SHA1",
  oauth_timestamp="generated_timestamp",
  oauth_token="oauth_token",
  oauth_version="1.0"'

这里是链接https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update @Gonzalo Nicolás 建议 谁能帮助我提供文档或一些编码示例。

【问题讨论】:

    标签: angular http ionic-framework twitter


    【解决方案1】:

    对不起我的英语,我来自阿根廷。您的解决方案是 POST 状态/更新 API,
    这个解决方案来自 t​​witter,如果你在上面搜索,你会找到你必须发送的所有文档和结构 假设您使用身份验证

    链接:https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update

    【讨论】:

    • @Mitch 任何人都可以帮助我提供文档或一些编码示例...关于这一点,我可以为客户端应用程序提供指南,以了解与 twitter 和 angular api 集成的所有操作。 sitepoint.com/building-twitter-app-using-angular 在本指南中,我建议您首先了解 auth0 用于注册社交媒体帐户的概念
    • Nicolas 我正在使用 twitter connect 来允许用户登录和注册
    • Nicolas 如果您需要帮助,请查看我对这个问题的回答
    【解决方案2】:

    据我了解,您可以使用简单的节点服务器访问 Twitter API。最初我认为这令人生畏,但实际上这没什么好担心的。

    你可以启动你的节点程序 创建项目目录

    mkdir server
    cd server
    npm init
    touch server.js
    

    并将 twit api 和 express js 安装到您的节点项目中

    npm install twit body-parser cors express
    

    在 twitter 开发者页面上创建您的 twitter 应用程序 https://apps.twitter.com/

    然后将此代码复制并粘贴到您需要在节点应用程序中创建的 server.js 文件中,您只需创建一个名为 server.js 的文件即可完成此操作

    const express = require('express');
    const Twitter = require('twit');
    
    const app = express();
    const client = new Twitter({
      consumer_key:         '...',
      consumer_secret:      '...',
      access_token:         '...',
      access_token_secret:  '...',
    });
    
    
    app.use(require('cors')());
    app.use(require('body-parser').json());
    
    app.post('/post_tweet', (req, res) => {
    
      tweet = req.body;
    
      client
        .post(`statuses/update`, tweet)
        .then(tweeting => {
          console.log(tweeting);
    
          res.send(tweeting);
        })
    
       .catch(error => {
        res.send(error);
      });
    
    
    });
    
    app.listen(3000, () => console.log('Server running'));
    

    然后在您的 Angular 项目中复制并粘贴此代码即可完成设置

    api_url = 'http://localhost:3000';
    
      tweet(tweetdata: string) {
        return this.http.post<any>(`${this.api_url}/post_tweet/`, {status: tweetdata})
            .pipe(map(tweet => {
    
                alert("tweet posted")
    
                return tweet;
            }));
    }
    sendTweet() {  
      this.tweet('This is app code')
                .pipe(first())
                .subscribe(
                    data => {
                        console.log('yes')
                    },
                    error => {
                      'failed'
                    });
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用以下代码在时间轴中尝试用于推文的原生 twitter 小部件脚本:(我没有在 angular/ionic 中尝试它,但在我的 html 中工作。)

      // initialization : 
      
      window.twttr = (function (d, s, id) {
          var t, js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) return;
          js = d.createElement(s);
          js.id = id;
          js.src = "https://platform.twitter.com/widgets.js";
          fjs.parentNode.insertBefore(js, fjs);
          return window.twttr || (t = {
              _e: [],
              ready: function (f) {
                  t._e.push(f)
              }
          });
      }(document, "script", "twitter-wjs"));
      
      // on button click, this will fire  (button will automatically generated by widget.)
      
      twttr.ready(function (twttr) {
          twttr.widgets.createShareButton(
              'link you want to share',
              document.getElementById('twr'), {
                  url: 'link that you want to share',
                  count: '1',
                  size: 'large'
              }).then(function (el) {
              console.log('button created');
          });
          twttr.events.bind('tweet', function (event) {
              console.log('tweet', event);
          });
      });
      

      注意:也许 window.twttr 不能在 Angular 中工作,因此您可以使用 window['twttr'] 而不是 window.twttr 变量。

      【讨论】:

        【解决方案4】:

        这将是一个有用的article

        const express = require('express');
        const Twitter = require('twit');
        
        const app = express();
        const client = new Twitter({
          consumer_key: 'Consumer Key Here',
          consumer_secret: 'Consumer  Secret  Here',
          access_token: 'Access Token Here',
          access_token_secret: 'Token  Secret Here'
        });
        
        
        app.use(require('cors')());
        app.use(require('body-parser').json());
        
        app.post('/post_tweet', (req, res) => {
        
          tweet = {status:"Hello world"};
        
            client
              .post(`statuses/update`, tweet)
              .then(timeline => {
                console.log(timeline);
        
                res.send(timeline);
              })
        
             .catch(error => {
              res.send(error);
            });
        
        
        });
        
        app.listen(3000, () => console.log('Server running'));
        

        Angular 推特服务

        export class TwitterService {
        
         api_url = 'http://localhost:3000';
        
          constructor(private http: HttpClient) { }
        
          getTimeline() {
            return this.http
              .get<any[]>(this.api_url+'/home_timeline')
              .pipe(map(data => data));
        
          }
        
          getMentions() {
            return this.http
              .get<any[]>(this.api_url+'/mentions_timeline')
              .pipe(map(data => data));
        
          }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-13
          • 2014-04-07
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-19
          相关资源
          最近更新 更多