Multipost VK

Multipost для Vk

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Multipost VK
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Multipost для Vk
// @author       ʄɛռɨx
// @match        https://vk.com/(Ваша страничка)
// @grant        none
// @license      GPL
// ==/UserScript==

(function() {
    'use strict';

   let wide_column = document.querySelector('#wide_column');
   let page_blocks = document.querySelectorAll('#wide_column > div');

   let future_post_module = createFuturePost();
   wide_column.insertBefore(future_post_module,page_blocks[1]);

})();

/**
 *  Эмуляция нажатия на элемент
 *  @param {DOMElement} element - узел на странице
 *  @return {boolean} - признак прохода события
 */
    function simulateClick(element) {
       var event = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true
       });
       var canceled = !element.dispatchEvent(event);
       return canceled;
    }

/**
 *  Отправка отложенного сообщения на стене ВК
 *  @param {string} text - Текст для отправки на свою стену
 *  @param {number} date - timestamp в миллисекундах от 1970
 */
    function sendPost(text = 'test post from #userscript with #tampermonkey',date = new Date(2018,10,26,10,1).getTime() ){

		//let text = 'test with #tampermonkey #userscript',
		//	date = new Date(2018,10,26,10,1).getTime()/1000;

        let send_post = document.querySelector('#send_post');
        let post_field = document.querySelector('#post_field');
        let post_action_btn_layout = document.querySelectorAll('.post_action_btn_layout')[1];

        date /= 1000;

        post_field.focus();
        post_field.innerHTML = text;

        simulateClick(post_action_btn_layout);
        let postpone_date = document.querySelector('[id^=postpone_date]');
        postpone_date.value = date;

        send_post.click();
    }

/**
 * Создание вспомогательного блока для будущих новостей
 */
    function createFuturePost(){
  let page_block = document.createElement('div');
  page_block.className = 'page_block';

  page_block.innerHTML = `<div class="module clear future_post_module" id="profile_future_post_module">
  <a class="header_right_link fl_r" onclick="return false">вспомогательная ссылка</a>

<a href="#" onclick="return false" class="module_header">
  <div class="header_top clear_fix">
    <span class="header_label fl_l">Мои будущие новости</span>
    <span class="header_count fl_l">0</span>
  </div>
</a>

  <div id="page_future_post_module" class="page_future_post_module" style="padding: 13px 20px 20px;">
    <textarea id='future_post'  style="width:500px;min-height:200px"></textarea>
     <div class="add_future_post_button_wrap" >
      <button class="flat_button add_future_post_button" id="send_future_post" >Разместить</button>
    </div>
  </div>


</div>`;

  const future_post = page_block.getElementsByTagName('textarea')[0];
  future_post.addEventListener('keyup', e => {
    let header_count = page_block.getElementsByTagName('span')[1];
    let posts = e.target.value.split(/\n/gi);
    header_count.innerHTML = posts.length;
  } );

  const send_future_post = page_block.getElementsByTagName('button')[0];
  send_future_post.addEventListener('click', e => {
    const future_post = document.querySelector('#future_post');
    let posts = future_post.value.split(/\n/gi);
    let current = new Date();
    current.setHours(8);
    current.setMinutes(Math.round(Math.random()*30));

    let k = 1000 * 3600 * 24;
    posts.forEach( (post, i) => {
       let tmp = new Date(current.getTime() + (i+1)*k);
       sendPost(post, tmp.getTime());
    });

  });

  return page_block;
}