mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Major update to twitter node for auth changes
This commit is contained in:
parent
e91f3704fc
commit
235831b464
@ -1,12 +1,46 @@
|
||||
|
||||
<script type="text/x-red" data-template-name="twitter-credentials">
|
||||
<div class="form-tips" style="background: #edd; padding: 20px; margin-bottom: 20px">
|
||||
<i class="fa fa-warning"></i> This version of the Twitter node will no longer be able to connect to the Twitter API from June 12th 2018. See <a href="https://bit.ly/2kr7InE">here</a> for details.
|
||||
<div class="form-row">
|
||||
<label for="node-config-input-screen_name"><i class="fa fa-twitter"></i> <span data-i18n="twitter.label.twitter-id"></span></label>
|
||||
<i class="fa fa-at"></i> <input type="text" id="node-config-input-screen_name">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<p style="margin-top: 30px;"><b>1.</b> <span data-i18n="twitter.label.create"></span> <a href="https://apps.twitter.com/" target="_blank" style="text-decoration:underline;">apps.twitter.com</a></p>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<p style="margin-top: 30px;"><b>2.</b> <span data-i18n="twitter.label.copy-consumer"></span></p>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label style="margin-left: 20px;" for="node-config-input-consumer_key"><span data-i18n="twitter.label.consumer_key"></span></label>
|
||||
<input type="password" id="node-config-input-consumer_key">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label style="margin-left: 20px;" for="node-config-input-consumer_secret"><span data-i18n="twitter.label.consumer_secret"></span></label>
|
||||
<input type="password" id="node-config-input-consumer_secret">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<p style="margin-top: 30px;"><b>3.</b> <span data-i18n="twitter.label.copy-accessToken"></span></p>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label style="margin-left: 20px;" for="node-config-input-access_token"><span data-i18n="twitter.label.access_key"></span></label>
|
||||
<input type="password" id="node-config-input-access_token">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label style="margin-left: 20px;" for="node-config-input-access_token_secret"><span data-i18n="twitter.label.access_secret"></span></label>
|
||||
<input type="password" id="node-config-input-access_token_secret">
|
||||
</div>
|
||||
<div class="form-row" id="node-config-twitter-row"></div>
|
||||
<input type="hidden" id="node-config-input-screen_name">
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-help-name="twitter-credentials">
|
||||
<p>Authentication for the Twitter API</p>
|
||||
<p>Earlier versions of this node provided one-click authentication. Twitter removed the ability
|
||||
to do that in June 2018. You must now register your own application with
|
||||
<a href="https://apps.twitter.com">Twitter</a> and generate your own access tokens.</p>
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
var twitterConfigNodeId = null;
|
||||
@ -18,73 +52,24 @@
|
||||
screen_name: {value:""}
|
||||
},
|
||||
credentials: {
|
||||
screen_name: {type:"text"},
|
||||
consumer_key: { type: "password"},
|
||||
consumer_secret: { type: "password" },
|
||||
access_token: {type: "password"},
|
||||
access_token_secret: {type:"password"}
|
||||
},
|
||||
label: function() {
|
||||
return this.screen_name;
|
||||
},
|
||||
exportable: false,
|
||||
oneditprepare: function() {
|
||||
var twitterConfigNodeId = this.id;
|
||||
var clickhere = this._("twitter.label.clickhere");
|
||||
var twitterID = this._("twitter.label.twitter-id");
|
||||
function showTwitterAuthStart() {
|
||||
var pathname = document.location.pathname;
|
||||
if (pathname.slice(-1) != "/") {
|
||||
pathname += "/";
|
||||
}
|
||||
var callback = encodeURIComponent(location.protocol+"//"+location.hostname+":"+location.port+pathname+"twitter-credentials/"+twitterConfigNodeId+"/auth/callback");
|
||||
$("#node-config-dialog-ok").button("disable");
|
||||
$("#node-config-twitter-row").html('<div style="text-align: center; margin-top: 20px; "><a class="editor-button" id="node-config-twitter-start" href="twitter-credentials/'+twitterConfigNodeId+'/auth?callback='+callback+'" target="_blank">'+clickhere+'</a></div>');
|
||||
$("#node-config-twitter-start").click(function() {
|
||||
twitterConfigNodeIntervalId = window.setTimeout(pollTwitterCredentials,2000);
|
||||
});
|
||||
}
|
||||
function updateTwitterScreenName(sn) {
|
||||
$("#node-config-input-screen_name").val(sn);
|
||||
$("#node-config-twitter-row").html('<label><i class="fa fa-user"></i> '+twitterID+'</label><span class="input-xlarge uneditable-input">'+sn+'</span>');
|
||||
}
|
||||
function pollTwitterCredentials(e) {
|
||||
$.getJSON('credentials/twitter-credentials/'+twitterConfigNodeId,function(data) {
|
||||
if (data.screen_name) {
|
||||
updateTwitterScreenName(data.screen_name);
|
||||
twitterConfigNodeIntervalId = null;
|
||||
$("#node-config-dialog-ok").button("enable");
|
||||
} else {
|
||||
twitterConfigNodeIntervalId = window.setTimeout(pollTwitterCredentials,2000);
|
||||
}
|
||||
})
|
||||
}
|
||||
if (!this.screen_name || this.screen_name === "") {
|
||||
showTwitterAuthStart();
|
||||
if (this.screen_name) {
|
||||
return "@"+this.screen_name
|
||||
} else {
|
||||
if (this.credentials.screen_name) {
|
||||
updateTwitterScreenName(this.credentials.screen_name);
|
||||
} else {
|
||||
showTwitterAuthStart();
|
||||
}
|
||||
return "Twitter: "+this.id
|
||||
}
|
||||
},
|
||||
oneditsave: function() {
|
||||
if (twitterConfigNodeIntervalId) {
|
||||
window.clearTimeout(twitterConfigNodeIntervalId);
|
||||
}
|
||||
},
|
||||
oneditcancel: function(adding) {
|
||||
if (twitterConfigNodeIntervalId) {
|
||||
window.clearTimeout(twitterConfigNodeIntervalId);
|
||||
}
|
||||
}
|
||||
exportable: false
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-template-name="twitter in">
|
||||
<div class="form-tips" style="background: #edd; padding: 20px; margin-bottom: 20px">
|
||||
<i class="fa fa-warning"></i> This version of the Twitter node will no longer be able to connect to the Twitter API from June 12th 2018. See <a href="https://bit.ly/2kr7InE">here</a> for details.
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-twitter"><i class="fa fa-user"></i> <span data-i18n="twitter.label.twitter-id"></span></label>
|
||||
<input type="text" id="node-input-twitter">
|
||||
@ -102,7 +87,6 @@
|
||||
<div id="tweet-events-deprecated" class="hide form-tips" style="background: #edd; padding: 20px; margin-bottom: 20px">
|
||||
<i class="fa fa-warning"></i> Twitter are withdrawing the API used to access a user's activity stream in August 2018 so this feature will be removed from the node in the near future. See <a href="https://bit.ly/2kr7InE">here</a> for details.
|
||||
</div>
|
||||
|
||||
<div class="form-row" id="node-input-tags-row">
|
||||
<label for="node-input-tags"><i class="fa fa-tags"></i> <span id="node-input-tags-label" data-i18n="twitter.label.for"></span></label>
|
||||
<input type="text" id="node-input-tags" data-i18n="[placeholder]twitter.placeholder.for">
|
||||
@ -120,7 +104,6 @@
|
||||
<li>all the tweets from accounts that the authenticated user follows</li>
|
||||
<li>all tweets by specified users</li>
|
||||
<li>direct messages received by the authenticated user</li>
|
||||
<li>twitter events for the authenticated user</li>
|
||||
</ul></p>
|
||||
<p>Use space for <i>and</i> and comma , for <i>or</i> when searching for multiple terms.
|
||||
If you want to pass in the search term(s) via the <code>msg.payload</code>, leave the <b>for</b> field blank.</p>
|
||||
@ -209,9 +192,6 @@
|
||||
|
||||
|
||||
<script type="text/x-red" data-template-name="twitter out">
|
||||
<div class="form-tips" style="background: #edd; padding: 20px; margin-bottom: 20px">
|
||||
<i class="fa fa-warning"></i> This version of the Twitter node will no longer be able to connect to the Twitter API from June 12th 2018. See <a href="https://bit.ly/2kr7InE">here</a> for details.
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-twitter"><i class="fa fa-user"></i> <span data-i18n="twitter.label.twitter-id"></span></label>
|
||||
<input type="text" id="node-input-twitter">
|
||||
|
@ -6,13 +6,14 @@ module.exports = function(RED) {
|
||||
var request = require('request');
|
||||
var twitterRateTimeout;
|
||||
|
||||
function TwitterNode(n) {
|
||||
function TwitterCredentialsNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.screen_name = n.screen_name;
|
||||
}
|
||||
RED.nodes.registerType("twitter-credentials",TwitterNode,{
|
||||
RED.nodes.registerType("twitter-credentials",TwitterCredentialsNode,{
|
||||
credentials: {
|
||||
screen_name: {type:"text"},
|
||||
consumer_key: { type: "password"},
|
||||
consumer_secret: { type: "password" },
|
||||
access_token: {type: "password"},
|
||||
access_token_secret: {type:"password"}
|
||||
}
|
||||
@ -47,7 +48,6 @@ module.exports = function(RED) {
|
||||
|
||||
function TwitterInNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.error("This version of the Twitter node will no longer be able to connect to the Twitter API from June 12th 2018. See https://bit.ly/2kr7InE for details.")
|
||||
this.active = true;
|
||||
this.user = n.user;
|
||||
//this.tags = n.tags.replace(/ /g,'');
|
||||
@ -57,12 +57,10 @@ module.exports = function(RED) {
|
||||
this.twitterConfig = RED.nodes.getNode(this.twitter);
|
||||
var credentials = RED.nodes.getCredentials(this.twitter);
|
||||
|
||||
var node = this;
|
||||
|
||||
if (credentials && credentials.screen_name == this.twitterConfig.screen_name) {
|
||||
if (credentials) {
|
||||
var twit = new Ntwitter({
|
||||
consumer_key: "OKjYEd1ef2bfFolV25G5nQ",
|
||||
consumer_secret: "meRsltCktVMUI8gmggpXett7WBLd1k0qidYazoML6g",
|
||||
consumer_key: credentials.consumer_key,
|
||||
consumer_secret: credentials.consumer_secret,
|
||||
access_token_key: credentials.access_token,
|
||||
access_token_secret: credentials.access_token_secret
|
||||
});
|
||||
@ -74,6 +72,7 @@ module.exports = function(RED) {
|
||||
//
|
||||
//},10000);
|
||||
|
||||
var node = this;
|
||||
if (this.user === "user") {
|
||||
node.poll_ids = [];
|
||||
node.since_ids = {};
|
||||
@ -365,11 +364,11 @@ module.exports = function(RED) {
|
||||
}
|
||||
|
||||
this.on('close', function() {
|
||||
if (node.tout) { clearTimeout(node.tout); }
|
||||
if (node.tout2) { clearTimeout(node.tout2); }
|
||||
if (this.tout) { clearTimeout(this.tout); }
|
||||
if (this.tout2) { clearTimeout(this.tout2); }
|
||||
if (this.stream) {
|
||||
this.restart = false;
|
||||
node.stream.removeAllListeners();
|
||||
this.stream.removeAllListeners();
|
||||
this.stream.destroy();
|
||||
}
|
||||
if (this.poll_ids) {
|
||||
@ -384,18 +383,17 @@ module.exports = function(RED) {
|
||||
|
||||
function TwitterOutNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.error("This version of the Twitter node will no longer be able to connect to the Twitter API from June 12th 2018. See https://bit.ly/2kr7InE for details.")
|
||||
this.topic = n.topic;
|
||||
this.twitter = n.twitter;
|
||||
this.twitterConfig = RED.nodes.getNode(this.twitter);
|
||||
var credentials = RED.nodes.getCredentials(this.twitter);
|
||||
var node = this;
|
||||
var dm_user;
|
||||
var dm_user;
|
||||
|
||||
if (credentials && credentials.screen_name == this.twitterConfig.screen_name) {
|
||||
if (credentials) {
|
||||
var twit = new Ntwitter({
|
||||
consumer_key: "OKjYEd1ef2bfFolV25G5nQ",
|
||||
consumer_secret: "meRsltCktVMUI8gmggpXett7WBLd1k0qidYazoML6g",
|
||||
consumer_key: credentials.consumer_key,
|
||||
consumer_secret: credentials.consumer_secret,
|
||||
access_token_key: credentials.access_token,
|
||||
access_token_secret: credentials.access_token_secret
|
||||
});
|
||||
@ -469,58 +467,4 @@ module.exports = function(RED) {
|
||||
}
|
||||
}
|
||||
RED.nodes.registerType("twitter out",TwitterOutNode);
|
||||
|
||||
var oa = new OAuth(
|
||||
"https://api.twitter.com/oauth/request_token",
|
||||
"https://api.twitter.com/oauth/access_token",
|
||||
"OKjYEd1ef2bfFolV25G5nQ",
|
||||
"meRsltCktVMUI8gmggpXett7WBLd1k0qidYazoML6g",
|
||||
"1.0",
|
||||
null,
|
||||
"HMAC-SHA1"
|
||||
);
|
||||
|
||||
RED.httpAdmin.get('/twitter-credentials/:id/auth', function(req, res) {
|
||||
var credentials = {};
|
||||
oa.getOAuthRequestToken({
|
||||
oauth_callback: req.query.callback
|
||||
},function(error, oauth_token, oauth_token_secret, results) {
|
||||
if (error) {
|
||||
var err = {statusCode: 401, data: "dummy error"};
|
||||
var resp = RED._("twitter.errors.oautherror",{statusCode: err.statusCode, errorData: err.data});
|
||||
res.send(resp)
|
||||
}
|
||||
else {
|
||||
credentials.oauth_token = oauth_token;
|
||||
credentials.oauth_token_secret = oauth_token_secret;
|
||||
res.redirect('https://api.twitter.com/oauth/authorize?oauth_token='+oauth_token)
|
||||
RED.nodes.addCredentials(req.params.id,credentials);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
RED.httpAdmin.get('/twitter-credentials/:id/auth/callback', function(req, res, next) {
|
||||
var credentials = RED.nodes.getCredentials(req.params.id);
|
||||
credentials.oauth_verifier = req.query.oauth_verifier;
|
||||
|
||||
oa.getOAuthAccessToken(
|
||||
credentials.oauth_token,
|
||||
credentials.token_secret,
|
||||
credentials.oauth_verifier,
|
||||
function(error, oauth_access_token, oauth_access_token_secret, results) {
|
||||
if (error) {
|
||||
RED.log.error(error);
|
||||
res.send(RED._("twitter.errors.oauthbroke"));
|
||||
}
|
||||
else {
|
||||
credentials = {};
|
||||
credentials.access_token = oauth_access_token;
|
||||
credentials.access_token_secret = oauth_access_token_secret;
|
||||
credentials.screen_name = "@"+results.screen_name;
|
||||
RED.nodes.addCredentials(req.params.id,credentials);
|
||||
res.send(RED._("twitter.errors.authorized"));
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
@ -9,7 +9,15 @@
|
||||
"followers": "followed by",
|
||||
"tweetslabel": "tweets",
|
||||
"eventslabel": "events",
|
||||
"clickhere": "Click here to authenticate with Twitter."
|
||||
"create": "Create your own application at",
|
||||
"copy-consumer": "From the 'Keys and Access Tokens' section, copy the Consumer Key and Secret",
|
||||
"consumer_key": "Consumer Key",
|
||||
"consumer_secret": "Consumer Secret",
|
||||
"copy-accessToken": "Create a new 'Access Token' and copy the Access Token and Secret",
|
||||
"access_key": "Access Token",
|
||||
"access_secret": "Access Token Secret",
|
||||
"enter-id":"Set your Twitter ID"
|
||||
|
||||
},
|
||||
"placeholder": {
|
||||
"for": "comma-separated words, @ids, #tags",
|
||||
@ -20,7 +28,7 @@
|
||||
"follow": "all tweets from people I follow",
|
||||
"user": "the tweets of specific users",
|
||||
"direct": "your direct messages",
|
||||
"events": "*deprecated* your twitter events"
|
||||
"events": "your twitter events"
|
||||
},
|
||||
"tip": "Tip: Use commas without spaces between multiple search terms. Comma = OR, Space = AND.<br/>The Twitter API WILL NOT deliver 100% of all tweets.<br/>Tweets of who you follow will include their retweets and favourites.<br/><br/>Leave <b>for</b> blank to set using msg.payload.",
|
||||
"status": {
|
||||
@ -39,12 +47,9 @@
|
||||
"unexpectedend":"stream ended unexpectedly",
|
||||
"invalidtag":"invalid tag property",
|
||||
"missingcredentials":"missing twitter credentials",
|
||||
"truncated":"truncated tweet greater than 140 characters",
|
||||
"truncated":"truncated tweet greater than 280 characters",
|
||||
"sendfail":"send tweet failed: __error__",
|
||||
"nopayload":"no payload to tweet",
|
||||
"oauthbroke":"something in twitter oauth broke.",
|
||||
"oautherror": "<html><head></head><body><p>Something went wrong with the authentication process. The following error was returned:</p><p><b>__statusCode__</b>: __errorData__</p><p>One known cause of this type of failure is if the clock is wrong on system running Node-RED</p></body></html>",
|
||||
"authorized": "<html><head></head><body><p>Authorised - you can close this window and return to Node-RED</p></body></html>"
|
||||
"nopayload":"no payload to tweet"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,23 +4,38 @@
|
||||
<li>認証したユーザがフォローしているアカウントからの全てのツイート</li>
|
||||
<li>指定したユーザの全てのツイート</li>
|
||||
<li>認証したユーザが受け取ったダイレクトメッセージ</li>
|
||||
<li>認証したユーザに対するtwitterイベント</li>
|
||||
</ul></p>
|
||||
<p>複数の検索語を指定する場合、スペース文字で<i>and</i>、コンマ「,」で<i>or</i>を表します。検索語を<code>msg.payload</code>で渡す場合、<b>for</b>フィールドは空としてください。</p>
|
||||
<p><i>ツイート</i>を<code>msg.topic</code>にセットし、送信者のスクリーンネームを付加します。</p>
|
||||
<p>ツイートの送信者の位置情報が既知の場合、<code>msg.location</code>に設定します。</p>
|
||||
<p>複数の検索語を指定する場合、スペース文字で<i>and</i>、コンマ「,」
|
||||
で<i>or</i>を表します。検索語を<code>msg.payload</code>で渡す場合、
|
||||
<b>for</b>フィールドは空としてください。</p>
|
||||
<p><i>ツイート</i>を<code>msg.topic</code>にセットし、送信者のスク
|
||||
リーンネームを付加します。</p>
|
||||
<p>ツイートの送信者の位置情報が既知の場合、
|
||||
<code>msg.location</code>に設定します。</p>
|
||||
|
||||
<p>返却値がイベントの場合、<code>msg.payload</code>にtwitterイベントを設定します。詳細については、<a href="https://dev.twitter.com/streaming/overview/messages-types#Events_event" target="_new">Twitterのドキュメント</a>を参照してください。</p>
|
||||
<p>tweetオブジェクトを<code>msg.tweet</code>に設定します。詳細は<a href="https://dev.twitter.com/overview/api/tweets" target="_new">Twitterのドキュメント</a>を参照してください。</p>
|
||||
<p>返却値がイベントの場合、<code>msg.payload</code>にtwitterイベントを設定します。
|
||||
詳細については、
|
||||
<a href="https://dev.twitter.com/streaming/overview/messages-types#Events_event"
|
||||
target="_new">Twitterのドキュメント</a>を参照してください。</p>
|
||||
<p>tweetオブジェクトを<code>msg.tweet</code>に設定します。詳細
|
||||
は<a href="https://dev.twitter.com/overview/api/tweets"
|
||||
target="_new">Twitterのドキュメント</a>を参照してください。</p>
|
||||
|
||||
<p><b>注</b>: このノードはFireHouseに接続はしないため、@idや#ハッシュタグに対する全ツイートを100%返すことは保証しません。</p>
|
||||
<p><b>注:</b> 特定のユーザ、もしくは、自身に対するダイレクトメッセージをフォローする場合、Twitter APIのレート制限の対象となります。そのため、フローのデプロイを15分のうちに複数回行うと、制限に引っかかってノード実行がエラーとなるかもしれません。このエラーは15分経過すれば自動的に解消します。</p>
|
||||
<p><b>注</b>: このノードはFireHouseに接続はしないため、@idや#ハッ
|
||||
シュタグに対する全ツイートを100%返すことは保証しません。</p>
|
||||
<p><b>注:</b> 特定のユーザ、もしくは、自身に対するダイレクトメッセー
|
||||
ジをフォローする場合、Twitter APIのレート制限の対象となります。
|
||||
そのため、フローのデプロイを15分のうちに複数回行うと、制限に引っ
|
||||
かかってノード実行がエラーとなるかもしれません。このエラーは15分
|
||||
経過すれば自動的に解消します。</p>
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-help-name="twitter out">
|
||||
<p>twitter outノード。<code>msg.payload</code>をツイートします。</p>
|
||||
<p>ダイレクトメッセージ(DM)を送るには、"D {ユーザ名} {メッセージ}"形式のペイロードを用います。</p>
|
||||
<p><code>msg.media</code>にBufferオブジェクトを指定すると、その値を画像としてツイートに付け加えます。</p>
|
||||
<p><code>msg.params</code>に「名前:値」の組みからなるオブジェクトを指定すると、更新リクエストのパラメータとして用います。</p>
|
||||
<p>ダイレクトメッセージ(DM)を送るには、"D {ユーザ名} {メッセージ}"
|
||||
形式のペイロードを用います。</p>
|
||||
<p><code>msg.media</code>にBufferオブジェクトを指定すると、その値
|
||||
を画像としてツイートに付け加えます。</p>
|
||||
<p><code>msg.params</code>に「名前:値」の組みからなるオブジェクト
|
||||
を指定すると、更新リクエストのパラメータとして用います。</p>
|
||||
</script>
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
"follow": "フォローしているユーザの全てのツイート",
|
||||
"user": "特定ユーザのツイート",
|
||||
"direct": "ダイレクトメッセージ",
|
||||
"events": "*deprecated* 自身のイベント"
|
||||
"events": "自身のイベント"
|
||||
},
|
||||
"tip": "注釈: 複数の検索条件を指定する場合は、空白のないコンマで区切り入力してください。コンマはOR条件、空白はAND条件となります。<br/>Twitter APIは全てのツイートを取得できないことがあります。<br/>「フォローしているユーザの全てのツイート」には、リツイートやいいねが含まれます。<br/><br/>msg.payloadに検索条件を指定する場合は <b>「検索条件」</b> を空欄にしてください。",
|
||||
"status": {
|
||||
@ -39,7 +39,7 @@
|
||||
"unexpectedend": "ストリームが予期せず終了しました",
|
||||
"invalidtag": "無効なタグプロパティ",
|
||||
"missingcredentials": "Twitterが認証されていません",
|
||||
"truncated": "140文字を超えるツイートが切り捨てられました",
|
||||
"truncated": "280文字を超えるツイートが切り捨てられました",
|
||||
"sendfail": "ツイートの投稿が失敗: __error__",
|
||||
"nopayload": "ツイートするペイロードがありません",
|
||||
"oauthbroke": "something in twitter oauth broke.",
|
||||
|
@ -1,20 +1,23 @@
|
||||
{
|
||||
"name" : "node-red-node-twitter",
|
||||
"version" : "0.1.15",
|
||||
"description" : "A Node-RED node to talk to Twitter",
|
||||
"dependencies" : {
|
||||
"name": "node-red-node-twitter",
|
||||
"version": "1.0.0",
|
||||
"description": "A Node-RED node to talk to Twitter",
|
||||
"dependencies": {
|
||||
"twitter-ng": "0.6.2",
|
||||
"oauth" : "0.9.14",
|
||||
"request" : "^2.75.0"
|
||||
"oauth": "0.9.14",
|
||||
"request": "^2.75.0"
|
||||
},
|
||||
"repository" : {
|
||||
"type":"git",
|
||||
"url":"https://github.com/node-red/node-red-nodes/tree/master/social/twitter"
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/node-red/node-red-nodes/tree/master/social/twitter"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"keywords": [ "node-red", "twitter" ],
|
||||
"node-red" : {
|
||||
"nodes" : {
|
||||
"keywords": [
|
||||
"node-red",
|
||||
"twitter"
|
||||
],
|
||||
"node-red": {
|
||||
"nodes": {
|
||||
"twitter": "27-twitter.js"
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user