Автопостинг 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: Разместил код скрипта в отдельном файле: рабочий код
Просто скопируйте его в свой проект.

Комментарии   

003
0 #11 003 03.05.2015 20:46
Тогда вот пример
если взять любой html файл залить его на диск ,после чего открыть то там будет просто код
prntscr.com/716l58 и свойства вот такие prntscr.com/716llw

но если поставить галочку вот тут prntscr.com/716jqt
то при заливке мы получим файл в формате гугл документов prntscr.com/716mah который в котором html был преобразован , свойства prntscr.com/716mjk

А теперь вопрос: как с помощью вашего кода сохранить созданные html фалы в формате гуглдокс ?
Цитировать | Сообщить модератору
maximus
0 #12 maximus 04.05.2015 16:32
Тепепрь понял о чем ты.
Дума вот это может помочь:
ctrlq.org/.../...

Конерктно вот эти две строчки кода:
var blob = Utilities.newBl ob(html, "text/html", "text.html");
var pdf = blob.getAs("application/pdf");

Сам попробую позже отпишусь.
Вот документация на функцию:
developers.google.com/.../...)
Вот поддерживаемые MIME типы насколько я понимаю:
developers.google.com/.../...
Цитировать | Сообщить модератору
maximus
0 #13 maximus 04.05.2015 16:35
Проверил.
В pdf можно, в гугл докс не получилось.
Цитировать | Сообщить модератору
003
0 #14 003 04.05.2015 18:33
ну вот в гуглдокс у нас тоже не получилось(
Цитировать | Сообщить модератору
nike air max blancas
0 #15 nike air max blancas 01.09.2016 01:28
Thanks, articles which can nike air max blancas understood, may always updated so that .
Цитировать | Сообщить модератору
portside languages
0 #16 portside languages 08.09.2017 07:37
Businesses are erasing the boundaries between nations and as a fruit, communication play the
requisite part in expanding your reach as entrepreneur.
Communication, in this matter, is the ability to convert between any language yoke there is
and the transfer services boom has made it disinterested easier.
You legitimate be enduring to persuade sure the retinue you trust
your rendition offers fair serving, which can be verified by checking the reviews of the definite one.
Цитировать | Сообщить модератору

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


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

Монетизация

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