These forums have been archived and are now read-only.

The new forums are live and can be found at https://forums.eveonline.com/

Nouveaux joueurs – Questions et réponses

 
  • Topic is locked indefinitely.
 

Spreadsheet

Author
Celwine Austrene
Sebiestor Tribe
Minmatar Republic
#1 - 2016-12-29 20:05:07 UTC
Bonjour, bonsoir,


Après une petite pause sur le jeu, me voilà de retour, avec l'envie de me mettre un peu plus sérieusement dans le commerce, trade industrie etc. En cherchant sur le net j’ai trouvé mon bonheur en anglais, je me débrouille pas mal alors ça allait, jusqu'à ce que je tombe sur un os, les spreadsheet, ou tableurs, c'est un outil qui m'a l'air primordial pour tout un tas de bonnes choses. Seulement voilà, je pige rien, que ce soit en vidéo ou par écrit, je rame, je rame, je rame, pire que dans une galère, et en plus les tutos ne sont pas tout jeune, et il n'existe rien en Français ( à ma connaissance).

Si l'un de vous avait la bonté de me rediriger vers, ou de me faire un tuto (même si ce n'est que les bases pour se débrouiller) ça serait vraiment génial, par ce que là je crois que je vais y passer trois plombe pour biter même pas la moitié du bousin....


Merci d'avance,
Fly safe
Nyalnara
Dark Evil Undead Ponies Productions
#2 - 2016-12-29 22:58:21 UTC
Vu que je sais pas exactement à quel niveau de compréhension se situe ton soucis, j'te propose de suivre un cours extrêmement basique (et en français!). Si c'est malheureusement pas suffisant, faut pratiquer, après.

French half-noob.

Non, je ne suis pas gentil.

Celwine Austrene
Sebiestor Tribe
Minmatar Republic
#3 - 2016-12-30 11:32:34 UTC
Quote:
vu que je sais pas exactement à quel niveau de compréhension se situe ton soucis


Il si situe au niveau des commandes qui lient les informations disponibles sur https://eve-central.com/ aux calculs du tableur, du coup recopier bêtement les tableurs disponibles sur internet me donnent des erreurs dans tous les sens, je pense que ton petit tuto devrait pouvoir m'aider, après effectivement, c'est la pratique qui fera le reste, merci beaucoup.
Nyalnara
Dark Evil Undead Ponies Productions
#4 - 2016-12-30 12:01:54 UTC
Dans mon souvenir, pour feeder mes feuilles excel, j'utilisais un script python qui allait lire un sacré paquet de données, et me générait des collections de données préformatées à utiliser en entrée dans mon excel.

Si tu veux faire de l'import dans une GoogleSheet, voila un exemple.
Pour faire l'import, tu va dans le menu: "Tools">"Script Editor". Dans la nouvelle page, tu va dans le menu "File">"New">"Script File". Tu lui file le nom de ton choix avec l'extension ".gs". Tu colle dedans le code qui suit:


/*
Takes a bunch of typeids from a list (duplicates are fine. multidimensional is fine) and returns a bunch of rows
with relevant price data.
TypeID,Buy Volume,Buy average,Buy max,Buy min,Buy Std deviation,Buy median,Buy Percentile,
Sell Volume,Sell Average,Sell Max,Sell Min,Sell std Deviation,Sell Median,sell Percentile
I'd suggest loading price data into a new sheet, then using vlookup to get the bits you care about in your main sheet.
loadRegionPrices defaults to the Forge
loadSystemPrices defaults to Jita
=loadRegionPrices(A1:A28)
=loadRegionPrices(A1:A28,10000002)
=loadRegionPrices(A1:A28,10000002,47)
=loadSystemPrices(A1:A28)
An example below:
https://docs.google.com/spreadsheets/d/1f9-4cb4Tx64Do-xmHhELSwZGahZ2mTTkV7mKDBRPrrY/edit?usp=sharing
*/
/*
* Loads prices for a given set of typeIDs for a specific region using Eve-Central's data.
* @param priceIDs A range where the item typeIDs are found.
* @param regionID The region to query.
* @param {number} cachebuster Increment this variable to refresh the data.
* @return The price data in multiple columns in the following order: TypeID,Buy Volume,Buy average,Buy max,Buy min,Buy Std deviation,Buy median,Buy Percentile,Sell Volume,Sell Average,Sell Max,Sell Min,Sell std Deviation,Sell Median,sell Percentile. This is suitable for use with VLOOKUP.
* @customfunction
*/
function loadRegionPrices(priceIDs,regionID,cachebuster){
  if (typeof regionID == 'undefined'){
    regionID=10000002;
  }
  if (typeof priceIDs == 'undefined'){
    throw 'need typeids';
  }
  if (typeof cachebuster == 'undefined'){
    cachebuster=1;
  }
  var prices = new Array();
  var dirtyTypeIds = new Array();
  var cleanTypeIds = new Array();
  var url="http://api.eve-central.com/api/marketstat?cachebuster="+cachebuster+"&regionlimit="+regionID+"&typeid=";
  priceIDs.forEach (function (row) {
    row.forEach ( function (cell) {
      if (typeof(cell) === 'number' ) {
        dirtyTypeIds.push(cell);
      }
    });
  });
  cleanTypeIds = dirtyTypeIds.filter(function(v,i,a) {
    return a.indexOf(v)===i;
  });
  var parameters = {method : "get", payload : ""};
 
  var o,j,temparray,chunk = 100;
  for (o=0,j=cleanTypeIds.length; o < j; o+=chunk) {
    temparray = cleanTypeIds.slice(o,o+chunk);
    Utilities.sleep(100);
    var xmlFeed = UrlFetchApp.fetch(url+temparray.join("&typeid="), parameters).getContentText();
    var xml = XmlService.parse(xmlFeed);
    if(xml) {
      var rows=xml.getRootElement().getChild("marketstat").getChildren("type");
      for(var i = 0; i < rows.length; i++) {
        var price=[parseInt(rows[i].getAttribute("id").getValue()),
                   parseInt(rows[i].getChild("buy").getChild("volume").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("avg").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("max").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("min").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("stddev").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("median").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("percentile").getValue()),
                   parseInt(rows[i].getChild("sell").getChild("volume").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("avg").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("max").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("min").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("stddev").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("median").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("percentile").getValue())];
        prices.push(price);
      }
    }
  }
  return prices;
}


Limite de caractères, la suite dans le post suivant.

French half-noob.

Non, je ne suis pas gentil.

Nyalnara
Dark Evil Undead Ponies Productions
#5 - 2016-12-30 12:14:18 UTC  |  Edited by: Nyalnara

/*
* Loads prices for a given set of typeIDs for a specific region using Eve-Central's data.
* @param priceIDs A range where the item typeIDs are found.
* @param systemID The system to query.
* @param {number} cachebuster Increment this variable to refresh the data.
* @return The price data in multiple columns in the following order: TypeID,Buy Volume,Buy average,Buy max,Buy min,Buy Std deviation,Buy median,Buy Percentile,Sell Volume,Sell Average,Sell Max,Sell Min,Sell std Deviation,Sell Median,sell Percentile. This is suitable for use with VLOOKUP.
* @customfunction
*/
function loadSystemPrices(priceIDs,systemID,cachebuster){
  if (typeof systemID == 'undefined'){
    systemID=30000142;
  }
  if (typeof priceIDs == 'undefined'){
    throw 'need typeids';
  }
  if (typeof cachebuster == 'undefined'){
    cachebuster=1;
  }
  var prices = new Array();
  var dirtyTypeIds = new Array();
  var cleanTypeIds = new Array();
  var url="http://api.eve-central.com/api/marketstat?cachebuster="+cachebuster+"&usesystem="+systemID+"&typeid=";
  priceIDs.forEach (function (row) {
    row.forEach ( function (cell) {
      if (typeof(cell) === 'number' ) {
        dirtyTypeIds.push(cell);
      }
    });
  });
  cleanTypeIds = dirtyTypeIds.filter(function(v,i,a) {
    return a.indexOf(v)===i;
  });
  var parameters = {method : "get", payload : ""};
 
  var o,j,temparray,chunk = 100;
  for (o=0,j=cleanTypeIds.length; o < j; o+=chunk) {
    temparray = cleanTypeIds.slice(o,o+chunk);
    var xmlFeed = UrlFetchApp.fetch(url+temparray.join("&typeid="), parameters).getContentText();
    var xml = XmlService.parse(xmlFeed);
    if(xml) {
      var rows=xml.getRootElement().getChild("marketstat").getChildren("type");
      for(var i = 0; i < rows.length; i++) {
        var price=[parseInt(rows[i].getAttribute("id").getValue()),
                   parseInt(rows[i].getChild("buy").getChild("volume").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("avg").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("max").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("min").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("stddev").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("median").getValue()),
                   parseFloat(rows[i].getChild("buy").getChild("percentile").getValue()),
                   parseInt(rows[i].getChild("sell").getChild("volume").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("avg").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("max").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("min").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("stddev").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("median").getValue()),
                   parseFloat(rows[i].getChild("sell").getChild("percentile").getValue())];
        prices.push(price);
      }
    }
  }
  return prices;
}


Dans mon exemple, tu as 4 pages:

  • "Production" qui reprend tousles résultats des pages de calcul de prix;
  • "price_load" qui fait l'appel pour récupérer les données de Eve-Central (case B2);
  • "price_source" qui contient la liste des IDs des objets que je veux importer;
  • "venture" qui contient le calcul du prix pour un venture


La récupération des données se fait en appelant la fonction "loadSystemPrices(priceIDs,systemID,cachebuster)". Si tu veux comme moi le prix Jita, tu n'as besoin que de remplir que le premier paramètre, en lui fournissant la liste des IDs des items dont tu veux importer les prix.
Et derrière, des additions et des multiplications dans tous les sens.

Bienvenu dans le monde magique des spreadsheets.

(Si t'as des questions, demande et j'essaierai de répondre en fonction des disponibilités.)

French half-noob.

Non, je ne suis pas gentil.

Celwine Austrene
Sebiestor Tribe
Minmatar Republic
#6 - 2016-12-30 12:16:52 UTC
C'est royal c'est exactement ce que je cherche à faire, choper les prix jita de divers item et ensuite faire des calculs avec, c'est super, je vais étudier tout ça, merci beaucoup :o
Nyalnara
Dark Evil Undead Ponies Productions
#7 - 2016-12-30 12:25:22 UTC
A noter que je ne récupère pas les coûts d'installation des jobs de prod, les indexes des systèmes, etc... Y'a moyen de le faire. Pour ça, faut choper d'autres scripts, je ne les ai pas sauvegardés, donc va falloir que tu cherche si tu veux aussi ce genre de trucs.

A noter également que je bosse avec Eve-Central comme source de données, mais y'a moyen de taper directement dans l'API CREST pour récupérer les données du market. (Pareil, j'ai pas le script.)

French half-noob.

Non, je ne suis pas gentil.

Celwine Austrene
Sebiestor Tribe
Minmatar Republic
#8 - 2016-12-30 12:33:43 UTC
J'ai pour habitude de récupérer tout sur EVE central, je ferais des recherches plus approfondies éventuellement une fois que je me serais bien approprié ce que tu m'a passé ;) Je te tiendrais au courant si jamais je trouve d'autres scripts sympa
Celwine Austrene
Sebiestor Tribe
Minmatar Republic
#9 - 2017-01-02 13:17:59 UTC
Salut,

j'ai essayé pleins de choses différentes pour avoir un bon outil de trade, ton script je n’ai pas réussi à le faire fonctionner, en revanche, avec un import XML et l'API d'eve central ça m'a donné quelque chose de prometteur malheureusement le chargement des prix et éphémère au bout de quelques minutes il remplace tous les prix (qui étaient corrects) par l'erreur #N/A, impossible de trouver pourquoi.

Retour à la case départ