Advertisement
Guest User

Untitled

a guest
Apr 24th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.10 KB | None | 0 0
  1. var fb = require('fb');
  2. var mysql = require('mysql');
  3.  
  4. var aboutThisSite = require('./about-this-site.js');
  5. var kaobei = require('./kaobei.js');
  6. var functions = require('./functions.js');
  7.  
  8. /**
  9. * 設定 Facebook App 連線
  10. */
  11. fb.options({
  12. version: kaobei.AppVersion,
  13. appId: kaobei.AppId,
  14. appSecret: kaobei.AppSecret
  15. });
  16. fb.setAccessToken(kaobei.FanPageAccessToken);
  17.  
  18. /**
  19. * 與資料庫連線
  20. */
  21. var connection = mysql.createConnection({
  22. host: kaobei.DBHost,
  23. user: kaobei.DBUser,
  24. password: kaobei.DBPassword,
  25. database: kaobei.DB
  26. });
  27. connection.connect();
  28.  
  29. /**
  30. * 從資料庫更新貼文在 FB 上的 ID
  31. */
  32. var UpdatePostId = function (_dataId, _postId) {
  33. connection.query('UPDATE `' + kaobei.FanPageEnglishName + '` SET ? WHERE ?', [{ postId: _postId }, { id: _dataId }], function (error, result) console.log(error);{ });
  34. }
  35.  
  36. /**
  37. * 送至 Facebook 並 PO 出
  38. * IP 必須傳入
  39. */
  40. var PostToFacebook = function (_mainString, _base64, _mode, _ip) {
  41. var secondsToPost = functions.RandomInt(10, 120);
  42. var urls = functions.UrlsInString(_mainString);
  43. var hashtags = functions.HashtagsInString(_mainString);
  44. var randomId = functions.RandomString(10);
  45. var shortPostUrl = functions.ShortUrl(aboutThisSite.AnnoyPostUrl + "?" + randomId);
  46. var shortReportUrl = functions.ShortUrl(aboutThisSite.LoginReportUrl + randomId);
  47.  
  48. var ts_now = Math.floor(new Date() / 1000);
  49. var ts_post = ts_now + secondsToPost + 5;
  50.  
  51. var photoUrl = "";
  52.  
  53. //儲存 Base64 編碼資料為圖片
  54. if (_mode == "photo") {
  55. photoUrl = functions.SaveBase64ToPNG(_base64, ts_now);
  56. }
  57.  
  58. //建立一筆資料
  59. connection.query('INSERT INTO `' + kaobei.FanPageEnglishName + '` SET ?', {
  60. dataId: randomId,
  61. postTime: ts_post,
  62. ip: _ip
  63. }, function (error, result) {
  64. if (error) {
  65. console.log(error);
  66. return;
  67. }
  68.  
  69. var insertId = result.insertId;
  70. var postTitle = "#新" + kaobei.FanPageChineseName + insertId + " 匿名發文: " + shortPostUrl + " 檢舉濫用: " + shortReportUrl;
  71. var mainMessage = "";
  72.  
  73. //某秒後送至 FB
  74. setTimeout(function () {
  75. mainMessage += postTitle;
  76. if (_mode == "photo") {
  77.  
  78. //加入所有 Hashtag
  79. if (hashtags != null) {
  80. mainMessage += "\n\n" + functions.UseCharMergeArray(hashtags, "");
  81. }
  82.  
  83. //加入所有 url
  84. if (urls != null) {
  85. mainMessage += "\n\n" + functions.UseCharMergeArray(urls, "\n");
  86. }
  87.  
  88. //送出至 FB
  89. fb.api(kaobei.FanPageId + '/photos', 'post', {
  90. message: mainMessage,
  91. url: photoUrl
  92. }, function (res) {
  93. if (!res || res.error) {
  94. console.log(res.error);
  95. return;
  96. }
  97. UpdatePostId(insertId, res.post_id);
  98. });
  99.  
  100. } else if (_mode == "message") {
  101. mainMessage += "\n\n" + _mainString;
  102.  
  103. //偵測第一個出現在主要字串中的 url
  104. var firstUrl = "";
  105. if (urls != null) {
  106. firstUrl = urls[0];
  107. }
  108.  
  109. //送出至 FB
  110. fb.api(kaobei.FanPageId + '/feed', 'post', {
  111. message: mainMessage,
  112. link: firstUrl
  113. }, function (res) {
  114. if (!res || res.error) {
  115. console.log(res.error);
  116. return;
  117. }
  118. UpdatePostId(insertId, res.id);
  119. });
  120. }
  121. }, secondsToPost * 1000);
  122. });
  123.  
  124. return randomId;
  125. }
  126.  
  127. /**
  128. * 送出一筆檢舉資料
  129. */
  130. var OneReport = function (_fbUserId, _dataId, _ip) {
  131. //檢查是否重複檢舉
  132. connection.query("SELECT * FROM ?? WHERE ? AND ?", [
  133. kaobei.ReportDT,
  134. {
  135. fbUserId: _fbUserId
  136. },
  137. {
  138. dataId: _dataId
  139. }
  140. ], function (error, rows, fields) {
  141. if (error || rows.length > 0) {
  142. console.log(error);
  143. return;
  144. }
  145. var ts_now = Math.floor(new Date() / 1000, 10);
  146. //新增一筆檢舉資料
  147. connection.query("INSERT INTO ?? SET ?", [
  148. kaobei.ReportDT,
  149. {
  150. fbUserId: _fbUserId,
  151. dataId: _dataId,
  152. reportTime: ts_now,
  153. ip: _ip
  154. }
  155. ], function (error, result) {
  156. if (error) {
  157. console.log(res.error);
  158. return;
  159. }
  160. //檢查檢舉人數,超標時(5人)刪除貼文
  161. connection.query("SELECT * FROM ?? WHERE ?", [
  162. kaobei.ReportDT,
  163. {
  164. dataId: _dataId
  165. }
  166. ], function (error, rows, fields) {
  167. if (error || rows.length < 5) {
  168. return;
  169. }
  170. //人數超標,取得貼文ID
  171. connection.query("SELECT * FROM ?? WHERE ?", [
  172. kaobei.FanPageEnglishName,
  173. {
  174. dataId: _dataId
  175. }
  176. ], function (error, rows, fields) {
  177. if (error || rows.length != 1) {
  178. console.log(res.error);
  179. return;
  180. }
  181. var postId = rows[0].postId;
  182. //刪除貼文相關資料
  183. //facebook
  184. fb.api("/" + postId, "DELETE", function (fbdelres) {
  185. if (!fbdelres || fbdelres.error) {
  186. console.log(fbdelres.error);
  187. return;
  188. }
  189. });
  190. //datatable kb
  191. connection.query("DELETE FROM ?? WHERE ?", [
  192. kaobei.FanPageEnglishName,
  193. {
  194. dataId: _dataId
  195. }
  196. ], function (error, result) {
  197. if (error) {
  198. console.log(error);
  199. return;
  200. }
  201. });
  202. //datatable report
  203. connection.query("DELETE FROM ?? WHERE ?", [
  204. kaobei.ReportDT,
  205. {
  206. dataId: _dataId
  207. }
  208. ], function (error, result) {
  209. if (error) {
  210. console.log(error);
  211. return;
  212. }
  213. });
  214. })
  215. })
  216. })
  217. });
  218. }
  219.  
  220. module.exports = {
  221. DBConnection: connection,
  222. FBConnection: fb,
  223. PostToFacebook: PostToFacebook,
  224. OneReport: OneReport
  225. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement