Автопостинг Google таблицы -> WP

Автор: maximus. Posted in Блог

В прошлой статье я рассматривал простой способ генерации html-страниц из подготовленной таблиц Google Spreadsheet.

Этот способ хорош если у вас много структурированно в таблицах контента из которого вы хотите нагенерить сайтов или просто кучу страниц.

Сегодня рассмотрим более продвинутый способ – автоматическую публикацию в WP используя интерфейс Wordpress XML RPC.

Не то чтобы прошлый пост вызвал бурный ажиотаж, но у нас с товарищем vinc возникла обширная переписка в почте, в результате которой я таки немного разобрался в теме и нашёл подходящую библиотеку.

Вообще, по запросу “google script xmlrpc” первой строчкой гуглиться статья, в которой автор описывает простой способ реализованный через подключаемую в скриптах библиотеку. К сожалению, не смотря на то, что пост довольно свежий (Январь 2015го года) автор толи убрал библиотеку из публичного доступа, толи просто забил. Связаться по электронке тоже не удалось.

Тут я мог бы углубиться в некоторые моменты программирования, но не буду. Скажу лишь, что намного проще, мне, как недопрограммисту, найти нужный код и адаптировать, чем писать построитель корректного XML RPC запроса. Поэтом поиски продолжились…

В результате я нашёл библиотеку на java которая работает в Google Script, и автор которой (Yinon Avraham) любезно помог мне разобраться что к чему и использовать её.

Вот собственно говоря сам код, который реализует задуманное.

function WP_out(){  

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  ss.setActiveSheet(ss.getSheets()[0]);
  var sheet = ss.getSheetByName("Исходные данные");
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var post_title = "";
  var post_html = "";
  var post_status = "";
  var post_keywords = "";
  var post_description = "";

  var url = "http://yoursite.ru/xmlrpc.php";
  var username = "admin";
  var password = "password";

  var row = values[0];

  
  for (var i = 1; i <= numRows - 1; i++) {
    row = values[i];
    
    post_html = row[0];
    post_title = row[1];
    post_status = row[2];
    post_keywords = row[3];
    post_description = row[4];
    
    var methodCall = {
      methodName : "wp.newPost",
      params : [
        0, username, password,
        {
          post_type: "post",
          post_status: post_status,
          post_title: post_title, 
          post_content: post_html,
          post_author: 1,
          custom_fields : [ {
            keywords: post_keywords,
            description : post_description
          } ] 
        }

      ]
    };
  
    var methodResponse;
    execMethodCall(url,methodCall,function(mr){methodResponse=mr;});
  }
}

По прежнему у нас есть таблица “Исходные данные”, которая содержит нужные тексты:

image

В меню есть пункт “Выгрузка – Запостить в WP”

image

После нажатия, данные из таблицы переносятся в WP, заданный в настройках скрипта. Конечно же в коде надо указать данные для авторизации и URL сайта.

Статус записи – publish, draft, future – означает в каком виде разместить пост. Publish – опубликовать, draft – черновик, future – отложенный пост. Для отложенного поста надо передавать ещё дату и время, не смог с ходу разобраться, как правильно указать, возможно с этой библиотекой и нельзя, есть такие подозрения.

Так же не нашёл в протоколе XML RPC Wordpress как передать ключевики и описания. Сам протокол поддерживает передачу сторонних данных, так называемые custom_fields, эти поля я в них и упаковал, но на мой WP не установлен никакой SEO плагин поэтому результат мне остался неизвестен.

Ещё момент. Таблицу и файл со скриптом, опубликованные в прошлый раз кто-то всё же пытался взломать. Ну вернее не взломать, а как-то использовать в корыстных целях. И хоть на мне это не может отразиться, это могло отразиться на посетителях таблицы, которые выдали бы скрипту разрешение на исполнение кода.

Вот такую штуку дописал неизвестный аноним (ну как неизвестный, вносил изменения некий “Влад *******”, Google Plus знает 3х пользователей с таким именем, один из них наш “герой”, дальше не разбирался):

image

По замыслу автора этот код должен был генерить в гугл диске посетителя файлы подобного вида: https://docs.google.com/document/d/1il6pSS9c1oWBWYs2tFzm4ofxNejDvEZOohdnWCXL0ec/

Эта ссылка видна в коде, в функции Permission. Но толи автор кода устал, толи по другой причине недоделал дело, код в общем-то безопасный. Хотя потенциальную угрозу он мог нести. Конечно я “откатил” изменения сделанные Владом, вернул всё к исходному состоянию. Влад, а-та-та! Учитывай, что анонимность в сети это понятие относительное.

Ввиду того, что потенциально вред может быть нанесён посетителям, на этот раз доступ к исходным файлам я дам только для чтения.

Вот исходники: https://goo.gl/HbkEwY

Всем бобра!

Кстати, в приложении, которое мы запустили два месяца назад внедрили рекламу и социальную плату за её отключение. Через пару недель будет пост со статистикой и цифрами из AdMob!

UPD1: Разместил код скрипта в отдельном файле: рабочий код
Просто скопируйте его в свой проект.

Комментарии   

Passed My HiSET
0 #21 Passed My HiSET 04.10.2017 20:40
Back in the day when I was all into World of Warcraft lore I attempted to write some fan fiction and even tried to conduct
a roleplaying thread on a WoWRP forum page. The fan fiction (which was
never finished) was in my opinion pretty good the RP thread was a disaster though.
Those attempts have taught me a lot about my own writing strengths and
weaknesses. Anyway, that was long but thank you shadiversity.
This video has been really helpful.
Цитировать | Сообщить модератору
FirstMitchell
0 #22 FirstMitchell 16.10.2017 06:00
I see you don't monetize your website, don't waste your traffic, you can earn extra bucks every
month because you've got hi quality content.
If you want to know how to make extra bucks, search for: Mrdalekjd methods for
$$$
Цитировать | Сообщить модератору

Добавить комментарий


Защитный код
Обновить

Монетизация

Представьтесь