dhampyresa (
dhampyresa) wrote2022-04-26 10:38 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
Automating auction posting code
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!
"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!
no subject
And ooooh there’s a python package for xmlrpc, I could make a thing. Need to think through the use case, but this is super-cool.
no subject
no subject
no subject