dhampyresa: (Default)
[personal profile] dhampyresa
This is the google appscript to auto publish DW posts based on data from an auction spreadsheet. Hopefully it's as user friendly as possible. It requires: copy-pasting the below code into the appropriate Google sheet's appscrit editor ("Extensions" > "Appscript"), inputting the relevant URL/username/password, running the "makeData()" function (approving the script), editing the data generated and then running the "makePosts()" function.

"makeData()" makes title, post content (including links to auto-generated bidding form and answers sheet) and tag list. "makePosts()" then creates the post and add a link to said to the reference sheet.




function getSpreadsheet() {
var sheetURL = "PUT URL OF THE SPREADSHEET WITH YOUR DATA HERE";

return sheetURL;
}



function makeData() {
var sheetURL = getSpreadsheet();

var data = SpreadsheetApp.openByUrl(sheetURL).getDataRange().getValues();

var DWsheet = SpreadsheetApp.openByUrl(sheetURL).getSheetByName("DW Post data");

if(DWsheet == null)
{
DWsheet = SpreadsheetApp.openByUrl(sheetURL).insertSheet("DW Post data");
}

DWsheet.clearContents();
DWsheet.appendRow(["Post Title", "Post HTML", "Post Taglist", "", "Post URL"]);

for (var a = 1; a < data.length; a++) {
var postTitle = data[a][1] + "'s offer post";

var sheetTitle = data[a][1] + "'s bidding form";

var bidSheet = SpreadsheetApp.create(sheetTitle);
var bidSheetURL = bidSheet.getUrl();

var bidForm = FormApp.create(sheetTitle).setDestination(FormApp.DestinationType.SPREADSHEET, bidSheet.getId());
bidForm.setCollectEmail(true).addTextItem().setTitle("Your bid:");
var bidFormURL = bidForm.getPublishedUrl();

var DWpost = "This is " + data[a][1] + "'s offer post.<br><br><hr><br><br>";

for (var c = 2; c < data[a].length; c++) {
DWpost = DWpost + "<b>" + data[0][c] + ":</b> " + data[a][c].toString().replace(/\n/g, "<br>") + "<br><br>";
}

DWpost = DWpost + "<hr><br><br>You can check current bids <a href='" + bidSheetURL + "'>here</a> and place your own bid <a href='" + bidFormURL + "'>here</a>.<br>"

var baseTags = data[a][4].toString().split(", ");
var taglist = "";

for (var b = 0; b < baseTags.length; b++) {
taglist = taglist + "fandom: " + baseTags[b] + ", ";
}

taglist = taglist + "medium: " + data[a][2].toString();

DWsheet.appendRow([postTitle, DWpost, taglist]);
}
}



function makePosts() {

var sheetURL = getSpreadsheet();
var data = SpreadsheetApp.openByUrl(sheetURL).getSheetByName("DW Post data").getDataRange().getValues();

var username = "INSERT YOUR DREAMWIDTH USRNAME HERE";
var password = "DW PASSWORD GOES HERE";

var date = new Date();

var xmlHeader = "<?xml version='1.0'?><methodCall><methodName>LJ.XMLRPC.postevent</methodName><params><param><value><struct><member><name>username</name><value><string>" + username + "</string></value></member><member><name>password</name><value><string>" + password + "</string></value></member>";

var xmlFooter = "<member><name>lineendings</name><value><string>pc</string></value></member><member><name>year</name><value><int>" + date.getFullYear() + "</int></value></member><member><name>mon</name><value><int>" + date.getMonth() + "</int></value></member><member><name>day</name><value><int>" + date.getDate() + "</int></value></member><member><name>hour</name><value><int>" + date.getHours() + "</int></value></member><member><name>min</name><value><int>" + date.getMinutes() + "</int></value></member></struct></value></param></params></methodCall>";

var url = "https://www.dreamwidth.org/interface/xmlrpc";


for (var a = 1; a < data.length; a++) {
var payload = xmlHeader + '<member><name>subject</name><value><string>' + data[a][0] + '</string></value></member><member><name>event</name><value><string><![CDATA[' + data[a][1] + ']]></string></value></member><member><name>props</name><value><struct><member><name>taglist</name><value><string>' + data[a][2] + '</string></value></member><member><name>opt_backdated</name><value><string>1</string></value></member><member><name>opt_nocomments</name><value><string>1</string></value></member></struct></value></member>' + xmlFooter;

var options =
{
"method": "post",
"payload": payload,
"headers": {
'Content-Type': 'text/xml',
'Cookie': 'ljuniq=82uHIsuEWNOkmCT%3A1649806254'
}
};

var response = UrlFetchApp.fetch(url, options);

if (response.getResponseCode() === 200) {
var postURLstart = response.getContentText().search("https://");
var postURLend = response.getContentText().search("</string>");
SpreadsheetApp.openByUrl(sheetURL).getSheetByName("DW Post data").getRange(a + 1, 5).setValue(response.getContentText().slice(postURLstart, postURLend));
}
else {
var errorMessage = "HTTP error code: " + response.getResponseCode();
SpreadsheetApp.openByUrl(sheetURL).getSheetByName("DW Post data").getRange(a + 1, 5).setValue(errorMessage);
}
}
}



I should probably do a better instruction guide with pictures and things, but rn i am tired. idk, thought it might be of interest to some people. Any feedback welcome!

If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting

Profile

dhampyresa: (Default)
dhampyresa

June 2025

S M T W T F S
123 4567
89 10 11121314
15 161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags