Image Uploader Scripting API
Image Uploader Scripting API
Version
1.4.0

Contents

  1. Introduction
  2. Example
  3. Functions to implement
  4. Global functions
  5. Upload filter script
  6. Parsing HTML with gumbo-query
  7. Translating scripts into different languages

Introduction

Image Uploader is using scripts written in Squirrel 3 language. Squirrel is a high level imperative, object-oriented programming language, designed to be a light-weight scripting language that fits in the size, memory bandwidth, and real-time requirements of applications like video games.

Squirrel 3.0 reference manual
Squirrel 3.0 Standard Libraries manual (PDF)

Scripts should be saved in utf-8 encoding in files with .nut extension and placed in the Data/Scripts directory.


Example

test <- "example"; // global variable
// This is the function that performs the upload of the file
// @param string pathToFile
// @param UploadParams options
// @return int - success(1), failure(0)
function UploadFile(pathToFile, options) {
nm.setUrl("http://example.com/upload.php");
nm.addQueryParamFile("file", pathToFile, ExtractFileName(pathToFile),"");
nm.addQueryParam("submit", "Upload file!");
nm.doUploadMultipartData();
local response = nm.responseBody(); // 'local' it's like javascript's 'var' but only for local variables
local directUrl = _RegexSimple(response, "\\[IMG\\](.+)\\[/IMG\\]",0);
options.setDirectUrl(directUrl);
return 1; //SUCCESS
}
// Helper function that simplifies working with regular expressions
// @param string data - the string we are looking in
// @param string regStr - regular expression, in the format supported by the standard squirrel language library.
// http://www.squirrel-lang.org/doc/sqstdlib2.html#d0e2580
// This format does not support some of the features of the PCRE format used in servers.xml.
// @param int start - starting position
// @return string - returns text captured by the first subpattern.
//
function _RegexSimple(data,regStr,start) {
local ex = regexp(regStr);
local res = ex.capture(data, start);
local resultStr = "";
if(res != null){
resultStr = data.slice(res[1].begin, res[1].end);
}
return resultStr;
}
// Authenticating on remote server (optional function)
// @var CFolderList list
// @return int - success(1), failure(0)
function Authenticate() {
// TODO: Your code
return 1; //SUCCESS
}
// Optional function:
// Retrieving folder (album) list from server
// @var CFolderList list
// @return int - success(1), failure(0)
//
function GetFolderList(list) {
// TODO: Your code
return 1; //SUCCESS
}
// Create an folder or an album
// @var CFolderItem parentAlbum
// @var CFolderItem album
// @return int - success(1), failure(0)
//
function CreateFolder(parentAlbum,album) {
// TODO: Your code
return 1; //SUCCESS
}
// Modify a folder or an album (update name, description)
// @var CFolderItem album
// @return int - success(1), failure(0)
//
function ModifyFolder(album) {
// TODO: Your code
return 1; //SUCCESS
}
// A function that returns a list of types of access restrictions to an album:
// private, public, only for friends, etc.
// @return array
return ["Private", "Public"];
}
int UploadFile(string pathToFile, UploadParams params)
int Authenticate()
array GetFolderAccessTypeList()

You have to implement at least one function — UploadFile.
If you want to support album listing/creating/modifying, you have to implement also GetFolderList, CreateFolder, ModifyFolder, GetFolderAccessTypeList.

nm - global object - is an instance of NetworkClient
ServerParams - global object - is an instance of ServerSettingsStruct

Parsing HTML with gumbo-query

Gumbo-query is a library that provides CSS selector-like queries for Gumbo-Parser. Use ScriptAPI::Document class.

local txt = "<h1><a id=\"logo\" class=\"link\">some link</a></h1>";
local doc = Document(txt);
print(doc.find("h1 a").text()+"\r\n");
print(doc.find("h1 a").length()+"\r\n");
print(doc.find("#logo").attr("class")+"\r\n");
nm.doGet("https://svistunov.dev");
doc = Document(nm.responseBody());
doc.find("a").each( function(index,elem) {
print(elem.text()+"-\r\n");
});