Giter VIP home page Giter VIP logo

gesi's Introduction

GESI

Google Sheets™ add-on for interacting with EVE ESI API. GESI provides an EVE Online SSO flow to authorize your character(s), as well as a wrapper around ESI in order to access your EVE Online data within Google Sheets™; much like =importXML() worked with the old XML API.

Setup:

  1. Install the add-on. From within Google Sheets™: Go to Add-Ons => Get add-ons => Search for GESI, click on it, and click Install.
  2. Give the script access to what it needs.
  3. There will now be a GESI option under the Add-Ons option in the menu bar. Click it and then click GESI => Authorize Character.
  4. Click the EVE SSO button in the modal. Login => select what character you want to authorize => Authorize.
  5. (Optional) Repeat step 4 to authorize other characters.
  6. Done.

Script Editor

By default, one does not have access to GESI functions for use in custom functions in the script editor. In order to gain access to these functions for custom logic, add GESI as a library to your script:

  1. Install the add-on, follow the setup instructions.
  2. Within the script editor, click the + icon next to the Libraries heading.
  3. Paste in 1KjnRVVFr2KiHH55sqBfHcZ-yXweJ7iv89V99ubaLy4A7B_YH8rB5u0s3 into the Script ID box and click Look up.
  4. Select the most recent version that is NOT HEAD, and click Add.

In order to use this, functions must be perpended with GESI, which maps to the Identifier field in the Libraries modal. For example, GESI.universe_types();

NOTE: Libraries do not update on their own. When a new version of GESI is released, click on GESI under the Libraries heading and select the most recent version that is NOT HEAD.

Usage

GESI works by defining custom functions that map to ESI routes. For example, if you wanted to get a list of your assets, you would use this endpoint; GET https://esi.evetech.net/v5/characters/{character_id}/assets/. In GESI, this would be =characters_character_assets() within the sheet.

Arguments can also be passed to the functions, =universe_types_type(34), would return type information for Tritanium. In addition to arguments specific to a function, GESI also defines some arguments that are common between all functions.

  • {string} name - Name of the character used for authentication. Defaults to the first authenticated character
    • Only present on functions that map to authenticated endpoints
    • See this for some additional information
  • {boolean} show_column_headings - If column headings should be shown. Defaults to true.
    • Mostly for use within the sheet. Determines if the column headings are displayed, such as location_id, or type_id, etc.
  • {string} version - Which ESI version to use for the request. Defaults to the latest stable version.
    • See this for some additional information

The common arguments have defaults, you do not need to provide them if your values are the same as the defaults. I.e. =characters_character_assets("MyMainCharacter", true, "latest") is the same as =characters_character_assets().

Using The Autocomplete/Tooltip Window

Google Sheets includes autocomplete for all custom functions, from both within the sheet and script editor. This is a super helpful tool for getting an idea of what each function does.

image-20200507125913620

Each specific function also has a tooltip window that provides a summary of a function, what arguments it takes, etc.

image-20200507125913620

The EXAMPLE section includes a sample function call, with the expected types included. See this for a breakdown of what those types mean.

NOTE: If the tooltip window is missing, you may need to expand it by clicking the little arrow next to the X.

Advanced Usage

The previous section goes over how to use GESI in its most basic form, getting data from ESI into a spreadsheet; much like =importXML() worked with the old XML API. However, GESI can also be used within Google App Scripts to enable creation of more advanced/complex logic via JavaScript.

NOTE: Be sure to complete the script editor setup instructions.

Built-In Functions

In addition to the ESI related functions, GESI also provides some methods intended to be used within the script editor.

  • invokeMultiple()/invokeMultipleRaw() - See this section for details.
  • getAuthenticatedCharacters() - Returns an object representing the characters that have been authenticated. Keyed by character name, value being an object including their character, corporation, and alliance ids.
  • getAuthenticatedCharacterNames() - Returns an array of character names that have authenticated, or null if none have been.
  • getCharacterData(characterName: string) - Returns an object with data related to the given characterName. Essentially is equivalent to ``getAuthenticatedCharacters()[characterName]`.
  • invoke(functionName: string, params: IFunctionParams = { show_column_headings: true }) - Invokes the functionName with the given params. Returns sheet formatted data (2D array). E.x. invoke("universe_types_type", { type_id: 34 }). Essentially the same as universe_types_type(34) but allows calling functions based on JS variables.
  • invokeRaw(functionName: string, params = { show_column_headings: false } as IFunctionParams) - Same as invoke, but returns the raw JSON data from the ESI request.
  • getClient(characterName?: string) - Returns an ESIClient for the given characterName. Defaults to the main character if no character name is provided. See the next section for details.

ESIClient

Internally, each function call results in the creation of an ESIClient for a specific character. The client is used to build and execute the request, parse the response, and format the data to return to the sheet. The creation of a client has some overhead (~0.3s) when created. While this normally does not have any noticeable impact when invoking a single request for a single character; it can become a problem when wanting to do a series of requests based for the same character/endpoint. An example of this could be fetching price history data for a list of type_ids.

Normally one would call markets_region_history(type_id, region_id) in a loop, adding results to some other array for processing later. The problem with this is that each invocation of markets_region_history would result in the creation of a new ESIClient. Fetching 100 ids would take a minimum of 30 seconds (0.3 * 100), when the total time of making those requests is less than 1 second.

The ESIClient can be used by advanced users who are developing advanced/complex sheets in order to increase performance. It can also be used by those who are building on top of GESI, using GESI more as a way to handle authentication while implementing the ESI interactions on their own.

getClient accepts an optional character name argument. This is the character who the client will be tied to, i.e. who the ESI requests will be made on behalf of. If no character name is given, it defaults to the main character. Before the client can be used, it must be initialized with a function name. For example:

var client = GESI.getClient().setFunction('characters_character_assets');

Any future calls to the client will be in the context of this function.

execute / executeRaw

These methods are essentially the same as invoke and invokeRaw mentioned within the Built-In Functions section. However, the API is slightly different. Since they are methods of the ESIClient, only the params need to be provided, since the function name is set directly on the client.

var client = GESI.getClient().setFunction('universe_types_type');
var type_data = client.executeRaw({ type_id: 34 });

buildRequest

The ESIClient also exposes a method that can be used to build a request object given a set of parameters. The most common use case for this would be to build out an array of requests before executing them manually via UrlFetchApp.fetchAll. This way, the user is able to have full control over the ESI data, while not having to worry about authentication, etc.

NOTE: There is no validation of arguments before executing the requests. Be sure to provide all required arguments, of the correct types etc.

var client = GESI.getClient().setFunction('markets_region_history');

var type_ids = [34, 35, 36];
var requests = type_ids.map(function(type_id) { return client.buildRequest({ type_id: type_id, region_id: 10000002 }); });

var responses = UrlFetchApp.fetchAll(requests);

// Process the responses

FAQ

How do I know if I have the latest version of GESI?

GESI will automatically update when a new version is released. To see what changed visit the forum thread or the Github Releases page.

NOTE: Changes in the ESI spec, such as adding/removing columns, name changes etc. may break your sheet.

How do I know what functions are available?

Check out functions.ts. This file lists all the available functions, as well as a description of what they return and the available parameters.

What if I want to use a specific ESI route version?

By default GESI uses the version currently on the latest label. If you wish to use a different version, use the version parameter. =characters_character_wallet_journal("Blacksmoke16", true, "v10"). The version can either be a specific version like "v4" or a label: "dev", "legacy", or "latest".

The Authorize Character option in the add-on menu is missing?

This happens when GESI is not authorized to run in the current document. This can be solved by:

  1. Go to Add-Ons => Manage add-ons
  2. Click on the three dots towards the top right of the GESI block
  3. Make sure Use in this document is checked
  4. Refresh the sheet and should be good

How do I get data from a specific character?

Each authenticated endpoint that has a name property that can be used to specify which character's token should be used in that request.

The first character that you authenticate gets set as your main character which will be used if you do not provide a value for the name argument for an authenticated endpoint.

For example =characters_character_assets() would get the assets for the first character that you authenticated, i.e. your MAIN_CHARACTER. =characters_character_assets("My Other Character") would get assets for My Other Character. The getMainCharacter() function can be used to get the name of the current main character. The main character can be updated via Add-Ons => GESI => Set Main Character.

What do the function parameter types mean?

Type Sample
boolean true or false
number 12
string "foo" Notice the double quotes

Array types are denoted with a [] following the data type of the parameter. An example of an array type could be number[] where a value for that would be A1:A10 where this range is a column of numbers.

Why does this cell contain all this random data?

As of now if an endpoint returns a property that is an array of objects nested inside the response, I am JSON stringifying it and displaying it in the column. The parseArray allows you to parse that array of values and output it like an endpoint function does, wherever you want to. You supply it with the name of the function the data is from, the column you are parsing, and the cell with the array data.

An example of this would be parseArray("characters_character_skills", "skills", B2) where B2 is the cell that contains the data.

How can I limit what scopes are used?

There is not built-in way to do this currently, however it is possible.

  1. Open the Authorize Characters modal
  2. Right click on the SSO button and click Copy link address
  3. Paste this link into notepad or some text editor
  4. Within the URL there is query param like &scopes=, which is set to a list of all ESI scopes separated by + signs
  5. Remove all the scopes that you do not want, or add ones that are not added by default
  6. Copy the URL and paste it into your browser
  7. Follow SSO flow as normal
  8. Characters authed using this modified URL will not be able to use any function that requires a scope that was not requested.
  9. Repeat for additional characters if desired

Using functions with multiple characters

A common use case is wanting to get the same data from multiple characters. For example, getting the industry jobs of multiple characters into a nice, easy to manage format. This can be achieved by using the invokeMultiple method. =invokeMultiple("characters_character_assets", characterNames). characterNames can either be a comma separated string like "Character1,Character2", a vertical range like A1:A10, or the result of getAuthenticatedCharacterNames(), or some other array of strings.

This method can be used directly in the sheet. However, if it requires arguments, then it should be wrapped in a custom function:

function getJobs() {
  return GESI.invokeMultiple("characters_character_industry_jobs", GESI.getAuthenticatedCharacterNames(), { include_completed: true })
}

invokeMultipleRaw is also available. It works the same as invokeMultiple, but returns an array of raw JSON data for the provided characterNames instead sheets formatted data (2D array).

Working with the raw ESI data

Google Sheets uses 2D arrays to represent data within a sheet. When working on custom functions or scripts, this format is less than ideal to work with. the invokeRaw(functionName, params) function can be used to return the raw ESI JSON data for a given endpoint. The function accepts a name of a function, and an optional object that includes any arguments that should be used. Examples:

  • invokeRaw("universe_types")
  • invokeRaw("universe_types_type", { type_id: 34 })

This method is meant to be used within custom functions and scripts.

See the advanced usage section for more details on working within the script editor.

Your Login session has expired

See this issue.

How do I know my EVE data isn't being misused?

In order to provide GESI, developers have to agree to the EVE Developer License Agreement. Section 2.3 explicitly prohibits it.

Contact Info

In-game: Blacksmoke16

Discord: #16

Discord Server: https://discordapp.com/invite/eEAH2et

Copyright

EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. CCP hf. has granted permission to GESI to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, the GESI. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.

Privacy Policy

GESI only requires access to spreadsheets it is enabled on in order to operate. GESI uses the spreadsheet's ID for error logging, and the current user's temporary anonymous key for analytics. GESI does not store, use, share, or access any other data related to your Google account.

gesi's People

Contributors

ahickey avatar blacksmoke16 avatar cameronhudson8 avatar ccp-zoetrope avatar chrisbaker97 avatar dimurgos avatar jonobrien avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gesi's Issues

Output from characters_character_skills function is not parsed correctly

When using the =characters_character_skills(charName) function, the output is split into three columns - Skills, Total SP, Unallocated SP. All of the skills returned appear unformatted in the same cell in the "Skills" column instead of appearing spread out down the whole column. I'm not sure if this is intentional but it hinders the usefulness of the function.

Registration issue

I am trying to authorize characters:

Steps:
-go to add-on tab>GESI>authorize characters
-the EVE login window shows up I log select char>window closes and new tab pops saying:

"Thank you for using GESI Darkmift. You can close this tab."

I close said tab>return to spreadsheet>nothing happens....click add on>GESI and its asking to authorize again.

I will not be surprised if Im doing something wrong.

I would appreciate your help.
Thank you.

Pulling names corpnames issues

After ESI got an Update and some Endpoints like character_names and others have to be migrated into the '/v2/universe/names/' scope now, GESI is missing a replacement for this.

One temporary workaround was Blacksmoke´s idea with this code snippet:

/**

  • Resolve a set of IDs to names and categories. Supported ID’s for resolving are: Characters, Corporations, Alliances, Stations, Solar Systems, Constellations, Regions, Types.
  • @param {array} The ids to resolve.
  • @return List of id/name associations for a set of ID’s.
  • @customfunction
    */
    function names(ids) {
    var data = doRequest_(BASE_URL + '/v2/universe/names/', 'POST', null, ids.map(function(id) { return id[0]; }));
    var response = [];
    data.data.forEach(function(d) {
    var temp = [];
    temp.push(d['id']);
    temp.push(d['name']);
    response.push(temp);
    });
    return response;
    }

But sadly this is not working if single cell conent want to be used, it is only working for a "range" of values.

A Solution would be nice to see :-)

Verify

I might be doing something wrong, but trying to authorize a charecter gives the following error:
The coordinates or dimensions of the range are invalid. (line 290, file "gesi", project "GESI")

I just installed the addon and clicked on authorize charecters

Issues Having friends use my skill check sheet

When I enter any of my accounts into the authorization portal it works fine. But my friends get this error after selecting their characters: You are trying to edit a protected cell or object. Please contact the spreadsheet owner to remove protection if you need to edit. (line 257, file "gesi", project "GESI")
Is there a way to allow them to use my sheet I shared with them without need them to make their own copies? (I assume the making their own private copy may fix the issue)

corporationObserverMining - Feature request

Would it be possible to make a new function or modify this one to do a few things, first enumerate the corporationObservers() function then dump the corporationObserverMining() to ALL observer IDs, and ideally specify a date-range in the output? Ideally also doing lookups for the Refinery name, and character name from their respective IDs.
That would be sweet.

Broken markets_region_history

=markets_region_history() returns the error after the 7.4.0 patch if no character is Authed

TypeError: Cannot call method "getCell" of null. (line 262).

New feature request

Do you have a plans to add POST requests to ESI, like a /v2/universe/names/ ?

Header Flag not Working

If you set headers to false in any function that has getarrayobjectresponse instead of getobjectresponse, there is no output at all. For instance, the skillQueue function.

Multilevel json objects are not parsed beyond the first.

Here is my test path to reproduce.

=universe_systems_system(31001688, en-us, true)

The planets cell has unparsed data.

[{"planet_id":40438381},{"planet_id":40438382},{"planet_id":40438383},{"planet_id":40438384},{"moons":[40438386],"planet_id":40438385},{"moons":[40438388],"planet_id":40438387},{"moons":[40438390,40438391],"planet_id":40438389},{"moons":[40438393],"planet_id":40438392},{"moons":[40438395,40438396,40438397,40438398,40438399,40438400,40438401,40438402,40438403,40438404,40438405,40438406,40438407,40438408,40438409,40438410,40438411,40438412,40438413],"planet_id":40438394},{"moons":[40438415,40438416,40438417,40438418,40438419,40438420,40438421,40438422,40438423,40438424,40438425,40438426,40438427,40438428,40438429,40438430,40438431,40438432,40438433,40438434,40438435,40438436,40438437,40438438,40438439],"planet_id":40438414},{"moons":[40438441,40438442,40438443,40438444,40438445,40438446],"planet_id":40438440},{"moons":[40438448,40438449,40438450,40438451,40438452,40438453,40438454,40438455,40438456,40438457,40438458,40438459,40438460,40438461,40438462,40438463,40438464,40438465],"planet_id":40438447}]

I'm not sure if I understand it 100% correctly if there should be a planets column and a moons column etc. But hopefully, this is enough to explain the issue.

Issue in README.md step 6?

I wasn't sure if It was meant to be Client ID or Script ID in the third bulletin, but It appears to also represent step 5 instead of step 4.

universe_ids does not return the expected values

universe_ids is not returning ID data for the supplied names.

When I run the following

function testFunc() {
var all_sheets = SpreadsheetApp.getActiveSpreadsheet();
var test_sheet = all_sheets.getSheets()[0]
data = GESI.universe_ids(['pyerite', 'catalyst'])
for (var i = 0; i < data.length; i++) {
test_sheet.appendRow(data[i]);
}
}

I get the following output:

agents alliances characters constellations corporations factions inventory_types regions stations systems
undefined [{"id":99008933,"name":"Phantom Commando"},{"id":99004764,"name":"Cattery"}] undefined undefined [{"id":1000014,"name":"Perkone"},{"id":1000064,"name":"Carthum Conglomerate"}] undefined undefined undefined undefined undefined

Directly using https://esi.evetech.net/ui/ gives the expected values.

The expected values would include the ID information for Pyerite and Catalysts. Instead, this is returning a single row through some logic I really don't understand.

characters_character_mail fails

The method for this endpoint is getting overridden by the POST version of the same name. This is causing the request to fail due to not having the required scope to send mail.

Tried to use the option to get names for alliance ids and other things

Hello,

after playing arround with alliance id function and my tries to get the names from them i run into an issue.

For example, at this moment eve has 3009 alliance ids and the function can call them all, fine so far, but then when i try to get the names for them with the function =allianceNames() i have to insert a range, the problem is as soon the value of alliances increases over 3009 i get this error message https://i.imgur.com/RKV3EOp.png

Obviously the function can not identify the range from where to where an id is existing automaticly in the collumn, so i tried to use a workaround using =ArrayFormula(MAX(IF(A3:A<>"";ROW(3:3500)))) to get the number of the last row with an alliance id and then my options are not much because i can not whrite the code to change the function that way it can identify the last cell in the collumn with an alliance id.

Would be nice to make it happen your script can do this automaticly and this for other functions too, to avoid the hassle to run into this kind of limitations or problems.

Next thing i saw is if i want to get the alliance corporations it returns only the corporation ids but not the names so i whrote this function in the way i am able to:
`
/**

  • Resolve a set of alliance corporation IDs to alliance corporation names
  • @param {boolean} opt_headers Default: True, Boolean if column headings should be listed or not.
  • @return Returns a list of id/name associations.
  • @customfunction
    */
    function corporationNames(corporation_ids, opt_headers) {
    if (!corporation_ids) throw 'A range of corporation ids is required';
    return getArrayObjectResponse_(arguments.callee.name, '', opt_headers, {corporation_ids: corporation_ids});
    }
    `

This way i can get the names up to 100 corporations from the ids but as you remember the issue with calling the names for alliances the limmitations bringing the problem if an alliance has more then 100 corporations like goons or some others, so the function to load "Chunks" is needed.

Then it would be nice to be able to get the members from a corporation, this function is not existing at this moment, but would be greate to use for also hopefully soon introduced functions for the mining ledger esi calls to identify members and get some kind of statistics and the abillity to compare the lists from people who mined and get fetched with the observer fuction, i hope i explained this correct so u can understand.

So theese things are more QOL things then real issues but this can make the script more usable and user friendly.

Best Regards,

Samuel

"GESI" Menu Item goes away

After some time the "GESI" entry in the menu just disappears, Instead there's a dropdown menu called "Script Center Menu" with the only entry "Read Data".

Clicking on "Read Data" doesn't seem to do anything.

All functions simply return "FALSE" without any error message.

Calling Alliance Names turns out as url length error

When calling =allianceNames() from alliance_ids it seems it has a hard limit on the url lenght, not sure if google is giving out this limit or the api itself but its not possible to call more then 100 for me.

The same occurs when using =corporationNames() from corporation_ids to get the names, i whrote my own part for this and it came up with the same issue, i called the goon id and they have more then 500 corporations, but calling more then 100 was also giving back url length error.

Regards Samuel

loyalty_stores_corporation_offers errors

loyalty_stores_corporation_offers does not include a param for corporation_id.

Will be fixed in 7.0.0.

Work around for now:

Replace the loyalty_stores_corporation_offers object in endpoints.gs with:

"loyalty_stores_corporation_offers": {
    "description": "Return a list of offers from a specific corporation's loyalty store",
    "headers": [
      {
        "name": "ak_cost"
      },
      {
        "name": "isk_cost"
      },
      {
        "name": "lp_cost"
      },
      {
        "name": "offer_id"
      },
      {
        "name": "quantity"
      },
      {
        "name": "required_items",
        "sub_headers": [
          "quantity",
          "type_id"
        ]
      },
      {
        "name": "type_id"
      }
    ],
    "method": "GET",
    "path": "/v1/loyalty/stores/{corporation_id}/offers/",
    "parameters": [
      {
        "description": "An EVE corporation ID",
        "in": "path",
        "name": "corporation_id",
        "type": "number",
        "required": true
      },
      {
        "description": "Default: true, Boolean if column headings should be listed or not.",
        "in": "parameters",
        "name": "opt_headers",
        "type": "boolean",
        "required": false
      }
    ],
    "summary": "A list of offers"
  },

and the function in functions.gs with

/**
 * Return a list of offers from a specific corporation's loyalty store
 * @param {number} corporation_id (Required) An EVE corporation ID
 * @param {boolean} opt_headers  Default: true, Boolean if column headings should be listed or not.
 * @return A list of offers
 * @customfunction
 */
function loyalty_stores_corporation_offers(corporation_id, opt_headers) {
  if(!corporation_id) throw 'corporation_id is required';
  return parseData_('loyalty_stores_corporation_offers',{corporation_id:corporation_id,opt_headers:opt_headers})
}

ESI load

When I try to load any data through characters_character_industry_jobs or characters_character_assets.

Even when I try to "refresh" token allowing again a user I got this error message :

SyntaxError: Unexpected token: < (ligne 308, fichier "gesi", projet "GESI")

it's french, ligne mean line, fichier => file and projet => project.

Thanks :)

Invalid_scope

Hi !
I try to use your script, but i have an issue !
i follow all the step and all is ok, but, when i click on the link in the side panel, the new page show this code :

{"error":"invalid_scope","error_description":"The requested scopes either don't exist, or are not valid for this client"}

Thank you.

Google is blocking GESI install.

Hi! Whenever I try to install GESI, I get the following error:

"Sign in with Google temporarily disabled for this app

This app has not yet been verified by Google in order to use Google Sign in."

Multiple users on same sheet

Having issues with multiple users on the same sheet.

I can auth as many characters/accounts as I want, and they all run fine, however if someone else (who isn't the owner of the sheet) attempts to do the same, it never auths, even though it says it has successfully authed. As I said, if he copies the sheet, reauths, it runs fine.

Functions, wich use GESI, are returning an error

While inside the script editor, I get an error stating "We're sorry, a server error occurred. Please wait a bit and try again.". If I run a function on the spreadsheet cells, with GESI calls in the script, it returns an internal error. This has started happening today.

reorder headers

So there used to be the option to modify the header ordering in endpoints, but this was removed from the readme with the migration to an add-on from the pure google-script implementation, do I have to manually copy and paste the scripts as in the paste to override the header ordering, or is this just not possible anymore?

I'm trying to modify which headers are optional and which are returned by default when opt_headers is False.
Just upgraded from v5.7

corporationExtractions()

This function seems to output the headers but thats it. No adjustment to the variables gives any data.

Syntax Error

endpoints.gs is tossing a Syntax error on line 9081 now when you try to save the updated code on Google Scripts, looks like it may just be an extra bracket at the end? Seems to save fine and work properly if removed.

Reference does not exist

Happens on characterAssets, and prob other ones with pagination.

Happens when no data is in that page AND opt_headers is false.

error on system request

Hi

when i use =universe_systems_system(,Q3,true)
i have an error than i havent yesterday

ESI response error: {"error":"Invalid 200 response: 'star_id' is required","code":500} (ligne 202).

value in Q3 : 30000142

Slow Execution With Multiple Characters

Hi. I have a few custom functions that piggyback off of GESI. I recently upgraded from an old version of GESI, where the auth information (i.e., the refresh tokens), was stored in Properties. By way of background, I have about 115 characters authed.

The goal of my scripts is to get the skill queue, attributes, and trained skills for each of my 115 characters, and then output them to a sheet. So for each character, I call the API three separate times. In the old version of GESI, where the auth data was stored in Properties, the entire script took about ~150 seconds to run, since getting the auth data for each character is significantly quicker from Properties than it is from the Auth Data spreadsheet.

In the new version of GESI, those same scripts take almost 2x as long to run, since for each call to the API, GESI reads the auth information from the Auth Data spreadsheet. So for each of the three GESI functions I am using, each function makes a separate call to the Auth Data sheet. Multiply that by 115 characters and im sure you can see the problem. As im sure you are aware, reading the auth data from a spreadsheet is significantly slower than calling that same information from properties.

As a result, the same scripts which executed in 150 seconds in the old version of GESI now take twice as long to execute in the new. Often I hit the execution time limit. Is there a way to reduce the amount of calls to the Auth Data sheet when running multiple functions? Perhaps storing the information from the Auth Data spreadsheet in Properties as well, and then using that information from Properties to make the API calls? Anything to reduce the amount of calls to the Auth Data spreadsheet when running multiple functions for the same character would be appreciated.

markets_structures_structure returns ESI Error every time

Whenever using the market_structures_structure function it always returns an error with the description, "ESI response error: Market access denied (line 249)". This is regardless of structure ID used, or any other variables in use. The plugin has been set up as per the instructions listed on the main page.

Can't get data from characterPlanetsDetail function call

The characterPlanetsDetail function call is returning the following error: "TypeError: Cannot read property "planet_id" from undefined. (line 1080)."

I've tried to provide the first parameter in the function call as an actual number: 12345678 and as a cell based upon the results of a characterPlanets call.

If I hard code a planet_id value (12345678) between line 850 and 851, the function characterPlanetDetails starting at line 1322 has a parameter planet_id value of: {planet_id=1.2345678E7}

Perhaps the conversion to scientific notation is causing the error?

Auth not being recognized, and 1 other

As stated in the title, despite have an authorized character, an error occurs when calling some functions:
Error: No characters have been authenticated. Visit Add-ons => GEST => Authorize Character to do so. (line 100)

Also, the following error occurs whenever GESI.markets_region_orders is called:
Error: {id} is not authed, or is misspelled. (line 102)
where {id} is the type_id passed to GESI.markets_region_orders.

Expansion of ESI market functions

Include /markets/prices and /markets/structures/{structure_id}/ possible but not necessary include the maximum buy and minimum sell price for a specific item or range

Reference to SCRIPT_ID can't be located.

Instructions say to replace a value 'SCRIPT_ID' in one of the javascript files.

"Go to File -> Project Properties and copy the Script ID. Update the SCRIPT_ID variable towards the top with your copied value."

There is no SCRIPT_ID value in any of the files.

Google Add-On unverified

Looks like google might have shadowbanned the addon. I can't add it to my sheets because a weird window pops up:
image

It appears you need to go through a validation step to make sure your addon isn't scraping people's google account info.

My spreadsheet couldn't use GESI functions

I followed the GESI readme but My spreadsheet couldn't use GESI functions . I am not sure the GESI script had loaded.
Is there any way to confirm?The page of Script Editor is blank.
20200416233518

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.