PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/webapp/plugins/twitter/model/class.TwitterPlugin.php

https://github.com/dagda/ThinkUp
PHP | 326 lines | 226 code | 55 blank | 45 comment | 17 complexity | 8343d3a9c0f2405c95cfb8748b7a247b MD5 | raw file
  1. <?php
  2. /**
  3. * Twitter Plugin
  4. *
  5. * Twitter crawler and webapp plugin retrieves data from Twitter and displays it.
  6. *
  7. * @author Gina Trapani <ginatrapani[at]gmail[dot]com>
  8. *
  9. */
  10. class TwitterPlugin implements CrawlerPlugin, WebappPlugin {
  11. public function crawl() {
  12. $config = Config::getInstance();
  13. $logger = Logger::getInstance();
  14. $id = DAOFactory::getDAO('InstanceDAO');
  15. $oid = DAOFactory::getDAO('OwnerInstanceDAO');
  16. $od = DAOFactory::getDAO('OwnerDAO');
  17. // get oauth values
  18. $plugin_option_dao = DAOFactory::GetDAO('PluginOptionDAO');
  19. $options = $plugin_option_dao->getOptionsHash('twitter', true);
  20. $current_owner = $od->getByEmail(Session::getLoggedInUser());
  21. $instances = $id->getAllActiveInstancesStalestFirstByNetwork('twitter');
  22. foreach ($instances as $instance) {
  23. if (!$oid->doesOwnerHaveAccess($current_owner, $instance)) {
  24. // Owner doesn't have access to this instance; let's not crawl it.
  25. continue;
  26. }
  27. $logger->setUsername($instance->network_username);
  28. $tokens = $oid->getOAuthTokens($instance->id);
  29. $noauth = true;
  30. if (isset($tokens['oauth_access_token']) && $tokens['oauth_access_token'] != ''
  31. && isset($tokens['oauth_access_token_secret']) && $tokens['oauth_access_token_secret'] != '') {
  32. $noauth = false;
  33. }
  34. if ($noauth) {
  35. $api = new CrawlerTwitterAPIAccessorOAuth('NOAUTH', 'NOAUTH',
  36. $options['oauth_consumer_key']->option_value,
  37. $options['oauth_consumer_secret']->option_value,
  38. $instance, $options['archive_limit']->option_value);
  39. } else {
  40. $api = new CrawlerTwitterAPIAccessorOAuth($tokens['oauth_access_token'],
  41. $tokens['oauth_access_token_secret'], $options['oauth_consumer_key']->option_value,
  42. $options['oauth_consumer_secret']->option_value,
  43. $instance, $options['archive_limit']->option_value);
  44. }
  45. $crawler = new TwitterCrawler($instance, $api);
  46. $api->init();
  47. if ($api->available_api_calls_for_crawler > 0) {
  48. $id->updateLastRun($instance->id);
  49. // No auth req'd
  50. //$crawler->fetchInstanceUserInfo();
  51. // No auth for public Twitter users
  52. $crawler->fetchInstanceUserTweets();
  53. if (!$noauth) {
  54. // Auth req'd, for calling user only
  55. $crawler->fetchInstanceUserMentions();
  56. $crawler->fetchRetweetsOfInstanceUser();
  57. $crawler->fetchInstanceUserFriends();
  58. $crawler->fetchInstanceUserFollowers();
  59. }
  60. $crawler->fetchStrayRepliedToTweets();
  61. $crawler->fetchUnloadedFollowerDetails();
  62. $crawler->fetchFriendTweetsAndFriends();
  63. //@TODO Gather favorites data
  64. if ($noauth) {
  65. // No auth req'd
  66. $crawler->fetchSearchResults($instance->network_username);
  67. }
  68. $crawler->cleanUpFollows();
  69. // Save instance
  70. if (isset($crawler->owner_object)) {
  71. $id->save($instance, $crawler->owner_object->post_count, $logger);
  72. }
  73. }
  74. }
  75. $logger->close(); # Close logging
  76. }
  77. public function renderConfiguration($owner) {
  78. $controller = new TwitterPluginConfigurationController($owner, 'twitter');
  79. return $controller->go();
  80. }
  81. public function getChildTabsUnderPosts($instance) {
  82. $twitter_data_tpl = Utils::getPluginViewDirectory('twitter').'twitter.inline.view.tpl';
  83. $child_tabs = array();
  84. //All tab
  85. $alltab = new WebappTab("tweets-all", "All Tweets", "All tweets", $twitter_data_tpl);
  86. $alltabds = new WebappTabDataset("all_tweets", 'PostDAO', "getAllPosts", array($instance->network_user_id,
  87. 'twitter', 15, "#page_number#"),
  88. 'getAllPostsIterator', array($instance->network_user_id, 'twitter', GridController::MAX_ROWS) );
  89. $alltab->addDataset($alltabds);
  90. array_push($child_tabs, $alltab);
  91. // Most replied-to tab
  92. $mrttab = new WebappTab("tweets-mostreplies", "Most replied-to", "Tweets with most replies", $twitter_data_tpl);
  93. $mrttabds = new WebappTabDataset("most_replied_to_tweets", 'PostDAO', "getMostRepliedToPosts",
  94. array($instance->network_user_id, 'twitter', 15, '#page_number#'));
  95. $mrttab->addDataset($mrttabds);
  96. array_push($child_tabs, $mrttab);
  97. // Most shared tab
  98. $mstab = new WebappTab("tweets-mostretweeted", "Most retweeted", "Most retweeted tweets", $twitter_data_tpl);
  99. $mstabds = new WebappTabDataset("most_retweeted", 'PostDAO', "getMostRetweetedPosts",
  100. array($instance->network_user_id, 'twitter', 15, '#page_number#'));
  101. $mstab->addDataset($mstabds);
  102. array_push($child_tabs, $mstab);
  103. return $child_tabs;
  104. }
  105. public function getChildTabsUnderReplies($instance) {
  106. $twitter_data_tpl = Utils::getPluginViewDirectory('twitter').'twitter.inline.view.tpl';
  107. $child_tabs = array();
  108. if (Session::isLoggedIn()) { //show protected tweets
  109. //All Mentions
  110. $amtab = new WebappTab("mentions-all", "All Mentions", "Any post that mentions you", $twitter_data_tpl);
  111. $amtabds1 = new WebappTabDataset("all_tweets", 'PostDAO', "getAllPosts", array($instance->network_user_id,
  112. 'twitter', 15), "getAllMentionsIterator", array($instance->network_username, GridController::MAX_ROWS,
  113. 'twitter'));
  114. $amtabds2 = new WebappTabDataset("all_mentions", 'PostDAO', "getAllMentions",
  115. array($instance->network_username, 15, $instance->network, '#page_number#'));
  116. $amtab->addDataset($amtabds1);
  117. $amtab->addDataset($amtabds2);
  118. array_push($child_tabs, $amtab);
  119. //All Replies
  120. $artab = new WebappTab("mentions-allreplies", "Replies",
  121. "Posts that directly reply to you (i.e., start with your name)", $twitter_data_tpl);
  122. $artabds = new WebappTabDataset("all_replies", 'PostDAO', "getAllReplies",
  123. array($instance->network_user_id, 'twitter', 15));
  124. $artab->addDataset($artabds);
  125. array_push($child_tabs, $artab);
  126. //All Orphan Mentions
  127. $omtab = new WebappTab("mentions-orphan", "Not Replies or Forwards",
  128. "Mentions that are not associated with a specific post", $twitter_data_tpl);
  129. $omtabds1 = new WebappTabDataset("all_tweets", 'PostDAO',
  130. "getAllPosts", array($instance->network_user_id, 'twitter', 15));
  131. $omtabds2 = new WebappTabDataset("orphan_replies", 'PostDAO', "getOrphanReplies",
  132. array($instance->network_username, 5, $instance->network));
  133. $omtab->addDataset($omtabds1);
  134. $omtab->addDataset($omtabds2);
  135. array_push($child_tabs, $omtab);
  136. //All Mentions Standalone
  137. $sttab = new WebappTab("mentions-standalone", "Standalone Mentions",
  138. "Mentions you have marked as standalone", $twitter_data_tpl);
  139. $sttabds1 = new WebappTabDataset("standalone_replies", 'PostDAO', "getStandaloneReplies",
  140. array($instance->network_username, 'twitter', 15));
  141. $sttabds2 = new WebappTabDataset("all_tweets", 'PostDAO', "getAllPosts", array($instance->network_user_id,
  142. 'twitter', 15));
  143. $sttab->addDataset($sttabds1);
  144. $sttab->addDataset($sttabds2);
  145. array_push($child_tabs, $sttab);
  146. } else {
  147. //All public mentions
  148. $amtab = new WebappTab("mentions-all", "All Mentions", "Any post that mentions you", $twitter_data_tpl);
  149. $amtabds2 = new WebappTabDataset("all_mentions", 'PostDAO', "getAllMentions",
  150. array($instance->network_username, 15, $instance->network, '#page_number#', true));
  151. $amtab->addDataset($amtabds2);
  152. array_push($child_tabs, $amtab);
  153. }
  154. // Conversations
  155. $convotab = new WebappTab("tweets-convo", "Conversations", "Exchanges between you and other users",
  156. $twitter_data_tpl);
  157. $convotabds = new WebappTabDataset("author_replies", 'PostDAO', "getPostsAuthorHasRepliedTo",
  158. array($instance->network_user_id, 15, 'twitter', '#page_number#'));
  159. $convotab->addDataset($convotabds);
  160. array_push($child_tabs, $convotab);
  161. return $child_tabs;
  162. }
  163. public function getChildTabsUnderFriends($instance) {
  164. $twitter_data_tpl = Utils::getPluginViewDirectory('twitter').'twitter.inline.view.tpl';
  165. $child_tabs = array();
  166. //Most Active Friends
  167. $motab = new WebappTab("friends-mostactive", 'Chatterboxes', '', $twitter_data_tpl);
  168. $motabds = new WebappTabDataset('people', 'FollowDAO', "getMostActiveFollowees", array(
  169. $instance->network_user_id, 'twitter', 15));
  170. $motab->addDataset($motabds);
  171. array_push($child_tabs, $motab);
  172. //Least Active Friends
  173. $latab = new WebappTab("friends-leastactive", 'Deadbeats', '', $twitter_data_tpl);
  174. $latabds = new WebappTabDataset("people", 'FollowDAO', "getLeastActiveFollowees", array(
  175. $instance->network_user_id, 'twitter', 15));
  176. $latab->addDataset($latabds);
  177. array_push($child_tabs, $latab);
  178. //Popular friends
  179. $poptab = new WebappTab("friends-mostfollowed", 'Popular', '', $twitter_data_tpl);
  180. $poptabds = new WebappTabDataset("people", 'FollowDAO', "getMostFollowedFollowees", array(
  181. $instance->network_user_id, 'twitter', 15));
  182. $poptab->addDataset($poptabds);
  183. array_push($child_tabs, $poptab);
  184. if (Session::isLoggedIn()) {
  185. //Former Friends
  186. $fftab = new WebappTab("friends-former", "Former", '', $twitter_data_tpl);
  187. $fftabds = new WebappTabDataset("people", 'FollowDAO', "getFormerFollowees", array($instance->network_user_id,
  188. 'twitter', 15));
  189. $fftab->addDataset($fftabds);
  190. array_push($child_tabs, $fftab);
  191. //Not Mutual Friends
  192. $nmtab = new WebappTab("friends-notmutual", "Not Mutual", '', $twitter_data_tpl);
  193. $nmtabds = new WebappTabDataset("people", 'FollowDAO', "getFriendsNotFollowingBack", array(
  194. 'twitter', $instance->network_user_id));
  195. $nmtab->addDataset($nmtabds);
  196. array_push($child_tabs, $nmtab);
  197. }
  198. return $child_tabs;
  199. }
  200. public function getChildTabsUnderFollowers($instance) {
  201. $twitter_data_tpl = Utils::getPluginViewDirectory('twitter').'twitter.inline.view.tpl';
  202. $child_tabs = array();
  203. //Follower count history
  204. $follower_history_tpl = Utils::getPluginViewDirectory('twitter').'twitter.followercount.tpl';
  205. $trendtab = new WebappTab('followers-history', 'Follower Count', 'Your follower count over time',
  206. $follower_history_tpl);
  207. $trendtabds = new WebappTabDataset("historybyday", 'FollowerCountDAO', 'getHistory',
  208. array($instance->network_user_id, 'twitter', 'DAY', 20));
  209. $trendtab->addDataset($trendtabds);
  210. $trendtabweekds = new WebappTabDataset("historybyweek", 'FollowerCountDAO', 'getHistory',
  211. array($instance->network_user_id, 'twitter', 'WEEK', 20));
  212. $trendtab->addDataset($trendtabweekds);
  213. $trendtabmonthds = new WebappTabDataset("historybymonth", 'FollowerCountDAO', 'getHistory',
  214. array($instance->network_user_id, 'twitter', 'MONTH', 20));
  215. $trendtab->addDataset($trendtabmonthds);
  216. array_push($child_tabs, $trendtab);
  217. //Most followed
  218. $mftab = new WebappTab("followers-mostfollowed", 'Most-followed', 'Followers with most followers',
  219. $twitter_data_tpl);
  220. $mftabds = new WebappTabDataset("people", 'FollowDAO', "getMostFollowedFollowers", array(
  221. $instance->network_user_id, 'twitter', 15));
  222. $mftab->addDataset($mftabds);
  223. array_push($child_tabs, $mftab);
  224. //Least likely
  225. $lltab = new WebappTab("followers-leastlikely", "Least Likely",
  226. 'Followers with the greatest follower-to-friend ratio', $twitter_data_tpl);
  227. $lltabds = new WebappTabDataset("people", 'FollowDAO', "getLeastLikelyFollowers", array(
  228. $instance->network_user_id, 'twitter', 15));
  229. $lltab->addDataset($lltabds);
  230. array_push($child_tabs, $lltab);
  231. if (Session::isLoggedIn()) {
  232. //Former followers
  233. $fftab = new WebappTab("followers-former", "Former", '', $twitter_data_tpl);
  234. $fftabds = new WebappTabDataset("people", 'FollowDAO', "getFormerFollowers", array($instance->network_user_id,
  235. 'twitter', 15));
  236. $fftab->addDataset($fftabds);
  237. array_push($child_tabs, $fftab);
  238. }
  239. //Earliest
  240. $eftab = new WebappTab("followers-earliest", "Earliest Joiners", '', $twitter_data_tpl);
  241. $eftabds = new WebappTabDataset("people", 'FollowDAO', "getEarliestJoinerFollowers", array(
  242. $instance->network_user_id, 'twitter', 15));
  243. $eftab->addDataset($eftabds);
  244. array_push($child_tabs, $eftab);
  245. return $child_tabs;
  246. }
  247. public function getChildTabsUnderLinks($instance) {
  248. $twitter_data_tpl = Utils::getPluginViewDirectory('twitter').'twitter.inline.view.tpl';
  249. $child_tabs = array();
  250. //Links from friends
  251. $fltab = new WebappTab("links-friends", 'Links From Friends', 'Links your friends posted', $twitter_data_tpl);
  252. $fltabds = new WebappTabDataset("links", 'LinkDAO', "getLinksByFriends", array($instance->network_user_id,
  253. 'twitter'));
  254. $fltab->addDataset($fltabds);
  255. array_push($child_tabs, $fltab);
  256. //Links from favorites
  257. /* $lftab = new WebappTab("links-favorites", 'Links From Favorites', 'Links in posts you favorited');
  258. $lftabds = new WebappTabDataset("links", 'LinkDAO', "getLinksByFriends", array($instance->network_user_id,
  259. 'twitter'));
  260. $lftab->addDataset($lftabds);
  261. array_push($child_tabs, $lftab);
  262. */
  263. //Photos
  264. $ptab = new WebappTab("links-photos", "Photos", 'Photos your friends have posted', $twitter_data_tpl);
  265. $ptabds = new WebappTabDataset("links", 'LinkDAO', "getPhotosByFriends", array($instance->network_user_id,
  266. 'twitter'));
  267. $ptab->addDataset($ptabds);
  268. array_push($child_tabs, $ptab);
  269. return $child_tabs;
  270. }
  271. }