This website uses cookies to ensure you get the best experience. Learn More.
Integrating Audience Targeting with your Apps – Part II: Rules
at-sdk-dir>./create_rule.sh twitter-sample “Twitter Sample”
at-sdk-dir/rule-twitter-sample>ant deploy
package com.liferay.content.targeting.rule.twitter.sample; import com.liferay.content.targeting.api.model.BaseRuleCategory; import com.liferay.content.targeting.api.model.RuleCategory; import org.osgi.service.component.annotations.Component; /** * @author Eduardo Garcia */ @Component(immediate = true, service = RuleCategory.class) public class TwitterSampleRuleCategory extends BaseRuleCategory { public static final String KEY = "twitter"; @Override public String getCategoryKey() { return KEY; } @Override public String getIcon() { return "icon-twitter"; } }
... @Override public String getIcon() { return "icon-twitter"; } @Override public String getRuleCategoryKey() { return TwitterSampleRuleCategory.KEY; } ...
... <@liferay_ui["message"] arguments=selectorField key="users-that-have-more-than" /> <@aui["input"] inlineField=true label="" name="followersThreshold" style="margin-bottom: 0; width: auto;" suffix="followers" title="number-of-followers" type="text" value=followersThreshold> <@aui["validator"] name="number" /> </@>
... @Override public String processRule( PortletRequest request, PortletResponse response, String id, Map<String, String> values) { int followersThreshold = GetterUtil.getInteger( values.get("followersThreshold")); JSONObject jsonObj = JSONFactoryUtil.createJSONObject(); jsonObj.put("followersThreshold", followersThreshold); return jsonObj.toString(); } @Override protected void populateContext( RuleInstance ruleInstance, Map<String, Object> context, Map<String, String> values) { int followersThreshold = 0; if (!values.isEmpty()) { followersThreshold = GetterUtil.getInteger( values.get("followersThreshold")); } else if (ruleInstance != null) { String typeSettings = ruleInstance.getTypeSettings(); try { JSONObject jsonObj = JSONFactoryUtil.createJSONObject( typeSettings); followersThreshold = GetterUtil.getInteger( jsonObj.getInt("followersThreshold")); } catch (JSONException jse) { } } context.put("followersThreshold", followersThreshold); } ...
... @Override public boolean evaluate( HttpServletRequest request, RuleInstance ruleInstance, AnonymousUser anonymousUser) throws Exception { User user = anonymousUser.getUser(); if (user == null) { return false; } Contact contact = user.getContact(); String twitterScreenName = contact.getTwitterSn(); if (Validator.isNull(twitterScreenName)) { return false; } JSONObject jsonObj = JSONFactoryUtil.createJSONObject( ruleInstance.getTypeSettings()); int followersThreshold = jsonObj.getInt("followersThreshold"); ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true); cb.setOAuthConsumerKey(_CONSUMER_KEY); cb.setOAuthConsumerSecret(_CONSUMER_SECRET); cb.setOAuthAccessToken(_ACCESS_KEY); cb.setOAuthAccessTokenSecret(_ACCESS_SECRET); try { TwitterFactory twitterFactory = new TwitterFactory(cb.build()); Twitter twitter = twitterFactory.getInstance(); IDs followerIDs = twitter.getFollowersIDs( twitterScreenName, -1, followersThreshold); long[] ids = followerIDs.getIDs(); if (followersThreshold == ids.length) { return true; } } catch (TwitterException te) { _log.error("Cannot retrieve data from Twitter", te); } return false; } ...
<ivy-module> ... <dependencies defaultconf="default"> ... <dependency name="twitter4j-core" org="org.twitter4j" rev="4.0.4" /> </dependencies> </ivy-module>
... Include-Resource:\ ...,\ @lib/twitter4j-core.jar ...