Advertisement
Guest User

функция

a guest
Dec 5th, 2020
484
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.82 KB | None | 0 0
  1. function messagesDownload ($type_download, $type_run, $account_id, $peers_limit, $peers_cycles, $peer_messages_limit, $channel_id) {
  2.  
  3. // Проверка выбора аккаунта
  4. if ($account_id >= 0) {
  5. } else {
  6. $messages_error_msg = "Не выбран аккаунт!";
  7. return $messages_error_msg ;
  8. }
  9.  
  10. // $type_download = 1 - скачивание к началу канала
  11. // $type_download = 2 - скачивание от +100 к последнему скачанному
  12.  
  13. // $type_run = 1 - обычный запуск
  14. // $type_run = 2 - запуск в кроне
  15. // Подключение настроек БД
  16. switch ($type_run) {
  17. case 1:
  18. require_once 'inc/config_db.inc.php';
  19. break;
  20. case 2:
  21. require_once '/home/i/ifredspb/tg.icrud.ru/public_html/inc/config_db.inc.php';
  22. break;
  23. }
  24.  
  25. // Подключение к базе
  26. $link = mysqli_connect($host, $user, $password, $database);
  27. if (!$link) {
  28. $result_link = "Ошибка2: " . mysqli_connect_errno($link) . ": " . mysqli_connect_error($link);
  29. return $result_link;
  30. }
  31.  
  32. // 2 Подключение к базе
  33. $link2 = mysqli_connect($host2, $user2, $password2, $database2);
  34. if (!$link2) {
  35. $result_link2 = "Ошибка2: " . mysqli_connect_errno($link2) . ": " . mysqli_connect_error($link2);
  36. return $result_link2;
  37. }
  38.  
  39. // Установка кодировки utf8
  40. $charset_res = mysqli_set_charset ($link, $charset);
  41. if (!$charset_res) {
  42. $result_charset = "Ошибка: " . mysqli_errno($link) . ": " . mysqli_error($link);
  43. return $result_charset;
  44. }
  45.  
  46. // 2 Установка кодировки utf8
  47. $charset_res2 = mysqli_set_charset ($link2, $charset);
  48. if (!$charset_res2) {
  49. $result_charset2 = "Ошибка2: " . mysqli_errno($link2) . ": " . mysqli_error($link2);
  50. return $result_charset2;
  51. }
  52.  
  53. // Проверка на пригодность аккаунта для скачивания сообщений
  54. $account_select = "SELECT * FROM accounts WHERE id = " . $account_id;
  55. $account_result = mysqli_query($link, $account_select);
  56. if ($account_result){
  57. $account_rows = mysqli_num_rows($account_result);
  58. if (!$account_rows) {
  59. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Нет такого аккаунта!" . "\n";
  60. return $messages_error_msg ;
  61. } else {
  62. $row = mysqli_fetch_assoc($account_result);
  63.  
  64. if ($row['block_end_ignore_flag']) {
  65. $peers_array['block_end_ignore_flag'] = "ДА";
  66. if ($row['block_end'] > time()) {
  67. $peers_array['block_end_string'] = $row['block_end_string'];
  68. } else {
  69. $peers_array['block_end_string'] = "";
  70. }
  71. } else {
  72. $peers_array['block_end_ignore_flag'] = "НЕТ";
  73. if ($row['block_end'] > time()) {
  74. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Аккаунт заблокирован до " . $row['block_end_string'] . "\n\n";
  75. return $messages_error_msg ;
  76. } else {
  77. $peers_array['block_end_string'] = "";
  78. }
  79. }
  80.  
  81. $account_peers_count_max = $row['peers_count_max'];
  82. $peers_array['peers_count_max'] = $account_peers_count_max;
  83. if ($row['peers_count'] > $account_peers_count_max) {
  84. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Ранее был достигнут предел количества источников (" . $row['peers_count_max'] . ")!\n";
  85. return $messages_error_msg ;
  86. }
  87.  
  88. if ($row['cycle_id'] > 0) {
  89. $cycle_id = $row['cycle_id'];
  90. } else {
  91. $cycle_id = 1;
  92. }
  93.  
  94. $cron_flag = $row['cron_flag'];
  95. $cron_peers_limit = $row['cron_peers_limit'];
  96. $cron_peers_cycles = $row['cron_peers_cycles'];
  97. $cron_peer_messages_limit = $row['cron_peer_messages_limit'];
  98. }
  99. } else {
  100. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Не доступен список аккаунтов!" . "\n";
  101. return $messages_error_msg ;
  102. }
  103.  
  104. // Инициализация переменных для статистики
  105. $stop_flag = 0;
  106. $operation_id = 2;
  107. $peers_array['cycle_id'] = $cycle_id;
  108. $peers_array['peers_count'] = 0;
  109. $peers_array['cycles'] = $peers_cycles;
  110. $peers_array['limit'] = $peer_messages_limit;
  111. $peers_array['peers'] = '';
  112. $peers_array['messages'] = 0;
  113. $peers_array['messages_all'] = 0;
  114. $peers_array['entities'] = 0;
  115. $peers_array['error'] = '';
  116.  
  117. if ($type_run == 2) {
  118. if ($cron_flag == 1) {
  119. $peers_limit = $cron_peers_limit;
  120. $peers_cycles = $cron_peers_cycles;
  121. $peer_messages_limit = $cron_peer_messages_limit;
  122. $channel_id = 0;
  123.  
  124. $peers_array['cycles'] = $peers_cycles;
  125. $peers_array['limit'] = $peer_messages_limit;
  126. } else {
  127. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Запуск задачи в кроне - отключен!" . "\n";
  128. return $messages_error_msg ;
  129. }
  130. }
  131.  
  132. // Новая сессия MadelineProto
  133.  
  134. // Тип запуска - руками или кроном
  135. switch ($type_run) {
  136. case 1:
  137. require_once 'vendor/autoload.php';
  138. break;
  139. case 2:
  140. require_once '/home/i/ifredspb/tg.icrud.ru/public_html/vendor/autoload.php';
  141. break;
  142. }
  143.  
  144. $settings = [
  145. 'db' => [
  146. 'type' => 'mysql',
  147. 'mysql' => [
  148. 'host' => "localhost",
  149. 'port' => 3306,
  150. 'user' => "ifredspb_tg_log",
  151. 'password' => "GhbdtnDBbg5",
  152. 'database' => "ifredspb_tg_log",
  153. 'cache_ttl' => "+5 minutes",
  154. 'max_connections' => 45,
  155. 'idle_timeout' => 600,
  156. ]
  157. ]
  158. ];
  159.  
  160. switch ($type_run) {
  161. case 1:
  162. switch ($account_id) {
  163. case 0:
  164. //$MadelineProto = new \danog\MadelineProto\API('session_0.madeline');
  165. $MadelineProto = new \danog\MadelineProto\API('session_0.madeline', $settings);
  166. break;
  167. case 1:
  168. //$MadelineProto = new \danog\MadelineProto\API('session_1.madeline');
  169. $MadelineProto = new \danog\MadelineProto\API('session_1.madeline', $settings);
  170. break;
  171. case 2:
  172. //$MadelineProto = new \danog\MadelineProto\API('session_2.madeline');
  173. $MadelineProto = new \danog\MadelineProto\API('session_2.madeline', $settings);
  174. break;
  175. case 3:
  176. //$MadelineProto = new \danog\MadelineProto\API('acc_3/session_3.madeline');
  177. $MadelineProto = new \danog\MadelineProto\API('acc_3/session_3.madeline', $settings);
  178. break;
  179. default:
  180. return "Ошибка выборки сессии!";
  181. break;
  182. }
  183. break;
  184. case 2:
  185. switch ($account_id) {
  186. case 0:
  187. //$MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_0.madeline');
  188. $MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_0.madeline', $settings);
  189. break;
  190. case 1:
  191. //$MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_1.madeline');
  192. $MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_1.madeline', $settings);
  193. break;
  194. case 2:
  195. //$MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_2.madeline');
  196. $MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/session_2.madeline', $settings);
  197. break;
  198. case 3:
  199. //$MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/acc_3/session_3.madeline');
  200. $MadelineProto = new \danog\MadelineProto\API('/home/i/ifredspb/tg.icrud.ru/public_html/acc_3/session_3.madeline', $settings);
  201. break;
  202. default:
  203. return "Ошибка выборки сессии!";
  204. break;
  205. }
  206. break;
  207. }
  208. //$MadelineProto->async(false);
  209.  
  210. //$newSettings = [
  211. // 'db' => [
  212. // 'type' => 'mysql',
  213. // 'mysql' => [
  214. // 'max_connections' => 8,
  215. // ]
  216. // ]
  217. //];
  218. //$MadelineProto->updateSettings($newSettings);
  219.  
  220. $MadelineProto->start();
  221.  
  222. //$nowSettings = $MadelineProto->getSettings();
  223. //echo "<pre>";
  224. //var_dump ($nowSettings);
  225. //echo "</pre>";
  226.  
  227. // Количество сообщений, внесенных в статистику ранее
  228. //$stat_messages_users_query = "SELECT messages_add FROM stat_messages_users ORDER BY id DESC LIMIT 1";
  229. //$stat_messages_users_result = mysqli_query($link, $stat_messages_users_query);
  230. //if ($stat_messages_users_result){
  231. // $row = mysqli_fetch_assoc($stat_messages_users_result);
  232. // if ($row['messages_add']) {
  233. // $peers_array['messages_prev'] = (int)$row['messages_add'];
  234. // }
  235. //}
  236.  
  237. // Создание подготавливаемого запроса вставки сообщений
  238. $messages_insert_query = "INSERT INTO messages (account_id, peer_id, message_id, message, message_short, views, message_date, message_date_string, fwd_name, fwd_user_id, fwd_channel_id, fwd_channel_post, fwd_message_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  239. $messages_insert_stmt = mysqli_prepare($link, $messages_insert_query);
  240.  
  241. $messages_insert2_query = "INSERT INTO messages (id, account_id, peer_id, message_id, message, message_short, views, message_date, message_date_string, fwd_name, fwd_user_id, fwd_channel_id, fwd_channel_post, fwd_message_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  242. $messages_insert2_stmt = mysqli_prepare($link2, $messages_insert2_query);
  243.  
  244. // Создание подготавливаемого запроса вставки ссылок
  245. $entities_insert_query = "INSERT INTO entities (peer_id, message_id, offset, length, url, work_flag) VALUES (?, ?, ?, ?, ?, 0)";
  246. $entities_insert_stmt = mysqli_prepare($link, $entities_insert_query);
  247.  
  248. // Создание подготавливаемого запроса обновления минимального номера скачанных сообщений
  249. $peer_requery_min_query = "UPDATE peers SET message_id_min = ? WHERE id = ?";
  250. $peer_requery_min_stmt = mysqli_prepare($link, $peer_requery_min_query);
  251.  
  252. // Создание подготавливаемого запроса обновления максимального номера скачанных сообщений
  253. $peer_requery_max_query = "UPDATE peers SET message_id_max = ? WHERE id = ?";
  254. $peer_requery_max_stmt = mysqli_prepare($link, $peer_requery_max_query);
  255.  
  256. // Создание подготавливаемого запроса обновления признака начала канала, окончания блокировки, ошибки скачивания и времени работы
  257. $peer_requery_begin_query = "UPDATE peers SET block_flag = ?, begin_flag = ?, block_end = ?, error_msg = ?, download_1_date = ?, download_1_date_string = ?, download_2_count = ?, download_2_date = ?, download_2_date_string = ?, download_last_date = ?, download_last_date_string = ? WHERE id = ?";
  258. $peer_requery_begin_stmt = mysqli_prepare($link, $peer_requery_begin_query);
  259.  
  260. // Создание подготавливаемого запроса вставки статистики (полной, аккаунта) скачивания сообщений
  261. $stat_accounts_full_insert_query = "INSERT INTO stat_accounts_full (account_id, operation_id, peer_id, messages_count, error_msg, cycle_id) VALUES (?, ?, ?, ?, ?, ?)";
  262. $stat_accounts_full_insert_stmt = mysqli_prepare($link, $stat_accounts_full_insert_query);
  263.  
  264. for ($i = 1; $i <= $peers_cycles; $i++) {
  265. $random = rand(100000, 2000000);
  266. usleep($random);
  267.  
  268. $count_peers = 0;
  269.  
  270. // Выбор источников для скачивания сообщений
  271. switch ($type_download) {
  272. case 1:
  273. if ($channel_id) {
  274. $peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_count, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND begin_flag = 0 AND account_id = " . $account_id . " AND id = " . $channel_id;
  275. } else {
  276. $peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_count, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND begin_flag = 0 AND account_id = " . $account_id . " ORDER BY created_at, id LIMIT " . $peers_limit;
  277. }
  278. break;
  279. case 2:
  280. if ($channel_id) {
  281. $peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND account_id = " . $account_id . " AND id = " . $channel_id;
  282. } else {
  283. //$peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_count, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND download_2_date > 0 AND account_id = " . $account_id . " ORDER BY download_2_count DESC, download_2_date, message_id_max DESC LIMIT " . $peers_limit;
  284. //$peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_count, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND download_2_date > 0 AND account_id = " . $account_id . " ORDER BY download_2_count DESC, download_last_date, download_2_date, message_id_max DESC LIMIT " . $peers_limit;
  285. $peers_select_query = "SELECT id, type, public_url, invite_url, username, title, begin_flag, message_id_min, message_id_max, join_flag, public_flag, download_1_date, download_1_date_string, download_2_count, download_2_date, download_2_date_string FROM peers WHERE public_flag = 1 AND block_flag = 0 AND join_flag = 1 AND download_2_date > 0 AND account_id = " . $account_id . " ORDER BY download_2_count DESC, download_last_date, download_2_date DESC LIMIT " . $peers_limit;
  286. }
  287. break;
  288. }
  289.  
  290. $peers_select_result = mysqli_query($link, $peers_select_query);
  291. $peers_select_rows = mysqli_num_rows($peers_select_result);
  292.  
  293. // Если нет источников для скачивания сообщений
  294. if (!$peers_select_rows) {
  295. if ($channel_id) {
  296. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Нет источников (" . $channel_id . ") для скачивания сообщений!" . "\n";
  297. } else {
  298. $messages_error_msg = date("Y-m-d H:i:s", time()) . ": (" . $account_id . ") Нет источников для скачивания сообщений!" . "\n";
  299. }
  300. return $messages_error_msg ;
  301. }
  302.  
  303. while( $row = mysqli_fetch_assoc($peers_select_result) ){
  304. $random = rand(0, 2000000);
  305. usleep($random);
  306.  
  307. $count_peers++;
  308. $peer_messages_count = 0;
  309. $peer_id = $row['id'];
  310. $peer_type = $row['type'];
  311. $peer_public_flag = $row['public_flag'];
  312. $peer_public_url = $row['public_url'];
  313. $peer_invite_url = $row['invite_url'];
  314. $peer_join_flag = $row['join_flag'];
  315. $peer_block_flag = 0;
  316. $peer_begin_flag = $row['begin_flag'];
  317. $peer_message_id_min = $row['message_id_min'];
  318. $peer_message_id_max = $row['message_id_max'];
  319. $peer_error_msg = '';
  320. $peer_block_end = 0;
  321. $peer_block_end_string = '';
  322. $peer_download_1_date = $row['download_1_date'];
  323. $peer_download_1_date_string = $row['download_1_date_string'];
  324. $peer_download_2_count = $row['download_2_count'];
  325. $peer_download_2_date = $row['download_2_date'];
  326. $peer_download_2_date_string = $row['download_2_date_string'];
  327. $peer_download_last_date = time();
  328. $peer_download_last_date_string = date("Y-m-d H:i:s", $peer_download_last_date);
  329. $message_id_min = $row['message_id_min'];
  330. $message_id_max = $row['message_id_max'];
  331. // echo "peer_id: " , $peer_id;
  332. // echo "<br>";
  333. // echo "peer_message_id_min: " , $peer_message_id_min;
  334. // echo "<br>";
  335. // echo "peer_message_id_max: " , $peer_message_id_max;
  336. // echo "<br>";
  337.  
  338. switch ($type_download) {
  339. case 1:
  340. $peer_offset_id = $peer_message_id_min;
  341. break;
  342. case 2:
  343. $peer_offset_id = $peer_message_id_max + $peer_messages_limit + 1;
  344. break;
  345. }
  346.  
  347. try {
  348. if ($peer_public_url) {
  349. $peer_join_url = $peer_public_url;
  350. $peer_messages_count_cycle = 0;
  351.  
  352. $settings = array(
  353. 'peer' => $peer_join_url,
  354. 'offset_id' => $peer_offset_id,
  355. 'offset_date' => 0,
  356. 'add_offset' => 0,
  357. 'limit' => $peer_messages_limit,
  358. 'max_id' => 0,
  359. 'min_id' => 0,
  360. 'hash' => 0,
  361. );
  362.  
  363. $messagesfull = $MadelineProto->messages->getHistory($settings);
  364.  
  365. // Выбор и внесение сообщений в базу
  366. $messages = $messagesfull['messages'];
  367. $message_id = 0;
  368. //$message_id_min = 0;
  369. //$message_id_max = 0;
  370. $messages_count = 0;
  371. foreach ($messages as $message) {
  372. if ($message['_'] == 'message') {
  373. $message_id = $message['id'];
  374. if (($type_download == 1) OR ($type_download == 2 AND $message_id > $peer_message_id_max)) { //
  375. $messages_count++;
  376.  
  377. if ($type_download == 1) {
  378. $peer_download_1_date = $message['date'];
  379. $peer_download_1_date_string = date("Y-m-d H:i:s", $peer_download_1_date);
  380.  
  381. if ($message_id_min == 0) {
  382. //echo $peer_id;
  383. //echo "<p>";
  384. $peer_download_2_date = time ();
  385. $peer_download_2_date_string = date("Y-m-d H:i:s", $peer_download_2_date);
  386. }
  387.  
  388. if ($message_id < $message_id_min OR $message_id_min == 0) {
  389. $message_id_min = $message_id;
  390. }
  391. }
  392.  
  393. if ($message_id > $message_id_max) {
  394. $message_id_max = $message_id;
  395. $peer_download_2_date = $message['date'];
  396. $peer_download_2_date_string = date("Y-m-d H:i:s", $peer_download_2_date);
  397. }
  398.  
  399. $message_date = $message['date'];
  400. $message_date_string = date("Y-m-d H:i:s", $message_date);
  401. if (array_key_exists('views', $message)) {
  402. $message_views = $message['views'];
  403. } else {
  404. $message_views = 0;
  405. }
  406. $message_message = $message['message'];
  407. $message_message_short = substr($message_message, 0, 255);
  408. $message_fwd_name = '';
  409. $message_fwd_user_id = 0;
  410. $message_fwd_channel_id = 0;
  411. $message_fwd_channel_post = 0;
  412. $message_fwd_message_date = 0;
  413. if (array_key_exists('fwd_from', $message)) {
  414. $message_fwd_from_array = $message['fwd_from'];
  415. if (array_key_exists('from_id', $message_fwd_from_array)) {
  416. if ($message_fwd_from_array['from_id']['_'] == 'peerChannel') {
  417. $message_fwd_channel_id = $message_fwd_from_array['from_id']['channel_id'];
  418. if (array_key_exists('channel_post', $message_fwd_from_array)) {
  419. $message_fwd_channel_post = $message_fwd_from_array['channel_post'];
  420. }
  421. } else if ($message_fwd_from_array['from_id']['_'] == 'peerUser') {
  422. $message_fwd_user_id = $message_fwd_from_array['from_id']['user_id'];
  423. }
  424. } else if (array_key_exists('from_name', $message_fwd_from_array)) {
  425. $message_fwd_name = $message_fwd_from_array['from_name'];
  426. }
  427. $message_fwd_message_date = $message_fwd_from_array['date'];
  428. }
  429.  
  430. // Внесение сообщения
  431. try {
  432. mysqli_stmt_bind_param($messages_insert_stmt, "iiissiissiiii", $account_id, $peer_id, $message_id, $message_message, $message_message_short, $message_views, $message_date, $message_date_string, $message_fwd_name, $message_fwd_user_id, $message_fwd_channel_id, $message_fwd_channel_post, $message_fwd_message_date);
  433. $messages_insert_result = mysqli_stmt_execute($messages_insert_stmt);
  434.  
  435. $messages_insert_id = mysqli_insert_id($link);
  436.  
  437. $peer_messages_count++;
  438. $peer_messages_count_cycle++;
  439. $peers_array['messages']++;
  440. } catch (Exception $e) {
  441. $messages_insert_error = $e->getMessage();
  442. return "Ошибка вставки сообщения: " . $messages_insert_error;
  443. }
  444. // 2 Внесение сообщения
  445. try {
  446. mysqli_stmt_bind_param($messages_insert2_stmt, "iiiissiissiiii", $messages_insert_id, $account_id, $peer_id, $message_id, $message_message, $message_message_short, $message_views, $message_date, $message_date_string, $message_fwd_name, $message_fwd_user_id, $message_fwd_channel_id, $message_fwd_channel_post, $message_fwd_message_date);
  447. $messages_insert2_result = mysqli_stmt_execute($messages_insert2_stmt);
  448. } catch (Exception $e) {
  449. $messages_insert_error = $e->getMessage();
  450. return "Ошибка вставки сообщения 2: " . $messages_insert_error;
  451. }
  452.  
  453. // Внесение ссылок из сообщения в базу
  454. if (isset($message['entities'])) {
  455. $message_entities = $message['entities'];
  456. foreach ($message_entities as $entity) {
  457. if ($entity['_'] == "messageEntityTextUrl") {
  458. $entity_offset = $entity['offset'];
  459. $entity_length = $entity['length'];
  460. $entity_url = $entity['url'];
  461.  
  462. try {
  463. mysqli_stmt_bind_param($entities_insert_stmt, "iiiis", $peer_id, $message_id, $entity_offset, $entity_length, $entity_url);
  464. $entities_insert_entity = mysqli_stmt_execute($entities_insert_stmt);
  465. $peers_array['entities']++;
  466. } catch (Exception $e) {
  467. $entities_insert_error = $e->getMessage();
  468. return "Ошибка вставки ссылки: " . $entities_insert_error;
  469. }
  470. }
  471. }
  472. }
  473. }
  474. }
  475. }
  476.  
  477. if ($type_download == 1) {
  478. // Обновление данных в таблице источников
  479. if ($message_id_min) {
  480. if ($message_id_min < $peer_message_id_min OR $peer_message_id_min == 0) {
  481. mysqli_stmt_bind_param($peer_requery_min_stmt, "ii", $message_id_min, $peer_id);
  482. $peer_requery_min_result = mysqli_stmt_execute($peer_requery_min_stmt);
  483. }
  484. } else {
  485. $peer_begin_flag = 1;
  486. }
  487.  
  488. if ($message_id_max > $peer_message_id_max) {
  489. mysqli_stmt_bind_param($peer_requery_max_stmt, "ii", $message_id_max, $peer_id);
  490. $peer_requery_max_result = mysqli_stmt_execute($peer_requery_max_stmt);
  491. }
  492. }
  493.  
  494. if ($type_download == 2) {
  495. if ($messages_count) {
  496. if ($message_id_max > $peer_message_id_max) {
  497. mysqli_stmt_bind_param($peer_requery_max_stmt, "ii", $message_id_max, $peer_id);
  498. $peer_requery_max_result = mysqli_stmt_execute($peer_requery_max_stmt);
  499. }
  500. }
  501. }
  502.  
  503. if ($type_download == 1) {
  504. // Добрались до начала источника - если не удалось скачать сообщения
  505. if (!$peer_messages_count_cycle) {
  506. $peer_begin_flag = 1;
  507. }
  508. }
  509. }
  510. } catch (Exception $e) {
  511. $peer_error_msg = $e->getMessage();
  512. if ($peers_array['error']) {
  513. $peers_array['error'] = $peers_array['error'] . ", \n" . $peer_id . ": " . $peer_error_msg;
  514. } else {
  515. $peers_array['error'] = $peer_id . ": " . $peer_error_msg;
  516. }
  517. $peer_error_msg_check = 'FLOOD_WAIT';
  518. $message_download_error_pos = strpos($peer_error_msg, $peer_error_msg_check);
  519. if ($message_download_error_pos !== false) {
  520. $peer_block_end = time() + substr($peer_error_msg, 11);
  521. $peer_block_end_string = date("Y-m-d H:i:s", $peer_block_end);
  522. $peers_array['error'] = $peers_array['error'] . " (" . $peer_block_end_string . ")";
  523. $stop_flag = 1;
  524. } else {
  525. $peer_error_msg_check1 = 'This peer is not present in the internal peer database';
  526. $message_download_error_pos1 = strpos($peer_error_msg, $peer_error_msg_check1);
  527. if ($message_download_error_pos1 !== false) {
  528. $peer_block_flag = 1;
  529. } else {
  530. $peer_error_msg_check2 = 'CHANNEL_INVALID';
  531. $message_download_error_pos2 = strpos($peer_error_msg, $peer_error_msg_check2);
  532. if ($message_download_error_pos2 !== false) {
  533. $peer_block_flag = 2;
  534. } else {
  535. $peer_error_msg_check3 = 'Did the context die';
  536. $message_download_error_pos3 = strpos($peer_error_msg, $peer_error_msg_check3);
  537. if ($message_download_error_pos3 !== false) {
  538. $stop_flag = 1;
  539. }
  540. }
  541. }
  542. }
  543. }
  544.  
  545. $peer_download_2_count = $messages_count;
  546.  
  547. // if ($peer_id = 1126727264) {
  548. // echo $peer_download_2_date_string;
  549. // echo "<br>";
  550. // echo $peer_download_last_date_string;
  551. // echo "<br>";
  552. // echo "<br>";
  553. // }
  554.  
  555. // Обновление признака начала канала и окончания блокировки
  556. mysqli_stmt_bind_param($peer_requery_begin_stmt, "iiisisiisisi", $peer_block_flag, $peer_begin_flag, $peer_block_end, $peer_error_msg, $peer_download_1_date, $peer_download_1_date_string, $peer_download_2_count, $peer_download_2_date, $peer_download_2_date_string, $peer_download_last_date, $peer_download_last_date_string, $peer_id);
  557. $peer_requery_begin_result = mysqli_stmt_execute($peer_requery_begin_stmt);
  558.  
  559. // Внесение статистики (аккаунта, полной) по скачиваемым сообщениям
  560. mysqli_stmt_bind_param($stat_accounts_full_insert_stmt, "iiiisi", $account_id, $operation_id, $peer_id, $peer_messages_count, $peer_error_msg, $cycle_id);
  561. $stat_accounts_full_insert_result = mysqli_stmt_execute($stat_accounts_full_insert_stmt);
  562.  
  563. // Подсчет количества источников и сообщений в данном цикле данного аккаунта
  564. $stat_accounts_full_query = "SELECT peer_id, SUM(messages_count) AS messagescount FROM stat_accounts_full WHERE account_id = " . $account_id . " AND cycle_id = " . $cycle_id . " GROUP BY peer_id";
  565. $stat_accounts_full_result = mysqli_query($link, $stat_accounts_full_query);
  566. $stat_accounts_full_rows = mysqli_num_rows($stat_accounts_full_result);
  567. $account_peers_count = 0;
  568. $account_messages_count = 0;
  569. if ($stat_accounts_full_rows) {
  570. while( $row = mysqli_fetch_assoc($stat_accounts_full_result) ){
  571. $account_peers_count++;
  572. $account_messages_count = $account_messages_count + $row['messagescount'];
  573. }
  574. }
  575. $peers_array['peers_count'] = $account_peers_count;
  576.  
  577. // Проверка наличия записи о текущем цикле данного аккаунта
  578. $stat_accounts_cycles_query = "SELECT id FROM stat_accounts_cycles WHERE account_id = " . $account_id . " AND cycle_id = " . $cycle_id;
  579. $stat_accounts_cycles_result = mysqli_query($link, $stat_accounts_cycles_query);
  580. $stat_accounts_cycles_rows = mysqli_num_rows($stat_accounts_cycles_result);
  581. if ($stat_accounts_cycles_rows > 0) {
  582. } else {
  583. $cycle_begin = time();
  584. $cycle_begin_string = "'" . date("Y-m-d H:i:s", $cycle_begin) . "'";
  585. $stat_accounts_cycles_begin_insert_query = "INSERT INTO stat_accounts_cycles (account_id, cycle_id, peers_last, cycle_begin, cycle_begin_string) VALUES ($account_id, $cycle_id, $count_peers, $cycle_begin, $cycle_begin_string)";
  586. $stat_accounts_cycles_begin_insert_result = mysqli_query($link, $stat_accounts_cycles_begin_insert_query);
  587. }
  588.  
  589. // Обновление статистики (аккаунта, по циклам)
  590. $stat_accounts_cycles_requery_end_query = "UPDATE stat_accounts_cycles SET peers_count = " . $account_peers_count . ", messages_count = " . $account_messages_count . " WHERE account_id = " . $account_id . " AND cycle_id = " . $cycle_id;
  591. $stat_accounts_cycles_requery_end_result = mysqli_query($link, $stat_accounts_cycles_requery_end_query);
  592.  
  593. // Если FLOOD_WAIT - внесение и обновление статистики (аккаунта) по циклам
  594. if ($peer_block_end) {
  595. $cycle_end = $peer_block_end;
  596. $cycle_end_string = date("Y-m-d H:i:s", $cycle_end);
  597.  
  598. $stat_accounts_cycles_requery_end2_query = "UPDATE stat_accounts_cycles SET error_msg = '" . $peer_error_msg . "', cycle_end = " . $cycle_end . ", cycle_end_string = '" . $cycle_end_string . "' WHERE account_id = " . $account_id . " AND cycle_id = " . $cycle_id;
  599. $stat_accounts_cycles_requery_end2_result = mysqli_query($link, $stat_accounts_cycles_requery_end2_query);
  600.  
  601. $cycle_id++;
  602. $cycle_begin = $peer_block_end + 1;
  603. $cycle_begin_string = "'" . date("Y-m-d H:i:s", $cycle_begin) . "'";
  604. $stat_accounts_cycles_begin_insert_query = "INSERT INTO stat_accounts_cycles (account_id, cycle_id, cycle_begin, cycle_begin_string) VALUES ($account_id, $cycle_id, $cycle_begin, $cycle_begin_string)";
  605. $stat_accounts_cycles_begin_insert_result = mysqli_query($link, $stat_accounts_cycles_begin_insert_query);
  606.  
  607. $accounts_query = "UPDATE accounts SET cycle_id = " . $cycle_id . ", peers_count = " . $account_peers_count . ", block_end = " . $peer_block_end . ", block_end_string = '" . $peer_block_end_string . "' WHERE id = " . $account_id;
  608. $accounts_result = mysqli_query($link, $accounts_query);
  609. } else {
  610. $accounts_query = "UPDATE accounts SET cycle_id = " . $cycle_id . ", peers_count = " . $account_peers_count . " WHERE id = " . $account_id;
  611. //$accounts_query = "UPDATE accounts SET cycle_id = " . $cycle_id . ", peers_count = " . $account_peers_count . ", block_end = " . $peer_block_end . ", block_end_string = '" . $peer_block_end_string . "' WHERE id = " . $account_id;
  612. $accounts_result = mysqli_query($link, $accounts_query);
  613. }
  614.  
  615. // Если $stop_flag (FLOOD_WAIT или 'Did the context die') - обновление в таблице аккаунтов и выход из циклов (каналов и циклов перебора)
  616. if ($stop_flag) {
  617. $peers_requery_block_query = "UPDATE accounts SET cycle_id = " . $cycle_id . ", block_end = " . $peer_block_end . ", block_end_string = '" . $peer_block_end_string . "' WHERE id = " . $account_id;
  618. $peers_requery_block_result = mysqli_query($link, $peers_requery_block_query);
  619. break;
  620. break;
  621. }
  622. }
  623.  
  624. // Обновление статистики (аккаунта, по циклам, последнего количества каналов)
  625. $stat_accounts_cycles_requery_last_query = "UPDATE stat_accounts_cycles SET peers_last = " . $count_peers . " WHERE account_id = " . $account_id . " AND cycle_id = " . $cycle_id;
  626. $stat_accounts_cycles_requery_last_result = mysqli_query($link, $stat_accounts_cycles_requery_last_query);
  627.  
  628. if ($peers_array['peers']) {
  629. $peers_array['peers'] = $peers_array['peers'] . ", " . $count_peers;
  630. } else {
  631. $peers_array['peers'] = $count_peers;
  632. }
  633. }
  634.  
  635. $peers_array['peers'] = $peers_limit . ": " . $peers_array['peers'];
  636.  
  637. // Количество сообщений, скачанных всего
  638. $account_messages_count_all_query = "SELECT COUNT(id) AS messages_count FROM messages";
  639. $account_messages_count_all_result = mysqli_query($link, $account_messages_count_all_query);
  640. $account_messages_count_all = 0;
  641. $account_messages_count_now = $peers_array['messages'];
  642. if ($account_messages_count_all_result){
  643. $row = mysqli_fetch_assoc($account_messages_count_all_result);
  644. if ($row['messages_count']) {
  645. $account_messages_count_all = (int)$row['messages_count'];
  646. $peers_array['messages_all'] = (int)$row['messages_count'];
  647. }
  648. }
  649.  
  650. // Отключение от базы
  651. mysqli_close($link);
  652.  
  653. return $peers_array;
  654. }
  655.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement