Talend Open Studio の Twitter OAuth プラグイン

2014/01/25 追記

2014/01/21 の時点で、 Use SSL connection という項目が追加されたようです。

  • Version 2.1 – 01/21/2014
    • Added support for SSL connections
    • Added support for Twitter Stream API
    • Removed the deprecated logger parameter
    • Updated to twitter4j 3.0.6

この記事は残しておきますけど、必要な方は最新バージョンへのアップデートをしてください。

Twitter のデータをデータベースに読み込むために Talend Open Studio とそのプラグイン tTwitterOAuth が便利で使用しているのですが、2014年1月14日から Twitter API の呼び出しが SSL のみになりました。

これが原因で tTwitterOAuth も Twitter からデータを呼び込む事が出来なくなってしまったため、以下の修正を加えました。

 

twitter4j.conf.ConfigurationBuilder クラスを生成後に setUseSSL を行っているだけです。

(手元に環境がないため動作確認が出来ていません。 build error になるかも…)

 

<%@ jet 
imports="
org.talend.core.model.process.INode
org.talend.core.model.process.ElementParameterParser
org.talend.core.model.process.IConnection
org.talend.core.model.process.IConnectionCategory
org.talend.designer.codegen.config.CodeGeneratorArgument
" 
%>
<% 
CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
INode node = (INode)codeGenArgument.getArgument();
String cid = node.getUniqueName();

// Parameters
String consumer_key = ElementParameterParser.getValue(node,"__CONSUMER_KEY__");
String consumer_secret = ElementParameterParser.getValue(node,"__CONSUMER_SECRET__");
String access_token = ElementParameterParser.getValue(node,"__ACCESS_TOKEN__");
String access_token_secret = ElementParameterParser.getValue(node,"__ACCESS_TOKEN_SECRET__");
String connection_type = ElementParameterParser.getValue(node,"__CONNECTION_TYPE__");
String logger = ElementParameterParser.getValue(node,"__LOGGER__");

%>
twitter4j.conf.ConfigurationBuilder cb_<%= cid %> = new twitter4j.conf.ConfigurationBuilder();
cb_<%= cid %>.setUseSSL(true);
cb_<%= cid %>.setOAuthConsumerKey(<%= consumer_key %>);
cb_<%= cid %>.setOAuthConsumerSecret(<%= consumer_secret %>);
cb_<%= cid %>.setOAuthAccessToken(<%= access_token %>);
cb_<%= cid %>.setOAuthAccessTokenSecret(<%= access_token_secret %>);
//cb_<%= cid %>.setLoggerImpl(<%=logger.length() > 0 ? "\"twitter4j.internal.logging." + logger + "\"" : null%>);

/**
 * TODO: it's better to enable json ONLY if there are some json connection in the whole job
 */
cb_<%= cid %>.setJSONStoreEnabled(true);

twitter4j.<%= connection_type %>Factory twitter_factory_<%= cid %> = new twitter4j.<%= connection_type %>Factory(cb_<%= cid %>.build());
twitter4j.<%= connection_type %> twitter_<%= cid %> = twitter_factory_<%= cid %>.getInstance();
globalMap.put("twitter_<%= cid %>",twitter_<%= cid %>);

Talend は、 java のソースコード(テンプレート)生成後にそれをビルドする仕組みになっていますので、こういった対応は楽[1. もしかしたら java の世界ではわりとポピュラーなのかもしれませんけど…]ですね。

試しに GitHub に branch を作成してみました。

https://github.com/MizunagiKB/talend-components-collection