Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .. 15 :: [one page] |
|
Author |
Thread Statistics | Show CCP posts - 2 post(s) |

Icahmura Hasaki
EVE University Ivy League
0
|
Posted - 2014.03.30 15:50:00 -
[1] - Quote
EveLib is a .NET Library for the Eve Online API and a few other popular APIs. It is written in C#, is open source and licensed under Apache v2.
It is still under heavy development, so expect a lot of fixes, tweaks and some new features. I will fix any bugs as soon as they are reported, and I can take requests for new features and APIs to be included.
Current stable version is v1.0, and includes the official Eve Online API, Eve-Central API and Eve-MarketData API.
Features
- Easy to use.
- XML configuration through app.config.
- Access to all popular APIs through one library.
- Adheres to C# and .NET conventions.
- Provides caching for CCP API requests.
- Modular and open source; you can easily change the caching, serialization or any other part of the library.
- A fairly comprehensive set of unit tests, including static xml samples for calls requiring authentication.
For more information, downloads and examples, check out the Github page. |

Icahmura Hasaki
EVE University Ivy League
0
|
Posted - 2014.04.02 16:04:00 -
[2] - Quote
I've fixed a few minor bugs and updated the API to the newest version, described here.
The current version is stable and tagged. If anyone wants me to upload the dll files separately, let me know. |

Icahmura Hasaki
EVE University Ivy League
1
|
Posted - 2014.04.14 15:37:00 -
[3] - Quote
Updated again with some more bugfixes. Added a better way to check if a given key is valid, and implemented support for parts of the api provided by element43. Next on the schedule is a few more of the calls to element43 and then the CREST api.
|

Icahmura Hasaki
EVE University Ivy League
1
|
Posted - 2014.04.19 15:43:00 -
[4] - Quote
Released version 1.2, with much improved error handling, debug output and other fixes, as well as support for element-43.com. Feel free to ask questions or for help here, or through email. I can normally get things fixed within a few hours. |

Jack Mensen
Specter Force Security
0
|
Posted - 2014.04.19 16:40:00 -
[5] - Quote
Heya, nice work there! Just took a quick look at your code, did you know that you have to take the current culture settings the program is running under into account when you are parsing numbers? I can't see any use of cultures in your code, but as said, I just skimmed it.
When parsing the security status for example I have to do
var culture = new CultureInfo("en-US"); c.SecurityStatus = float.Parse(cResult.Element("securityStatus").Value, culture);
to parse this correctly: -2.66483930517884
That's because the point is used to group thousands in Germany, the colon marks the decimal part. Just wanted to tell you that, if you are already aware of it never mind me! 
Greetings, Jack |

RO ALEXANDER
S0utherN Comfort Against ALL Authorities
0
|
Posted - 2014.04.20 20:41:00 -
[6] - Quote
Hey! Trying out your code, build your projects and added the resulting dlls as a reference to my current c# solution (a tool I'm making just for me that displays various information and views of my accounts in a format I want) .
Question is: I've seen you're storing hashes of request so that you know if you already made that request and when the cache expires, however I might be mistaken but there are certain data pieces (logs, assets list, journal) that are not stored on Eve's CDN and you only get one chance to get the data. Are you planning on storing that sort of stuff locally somewhere, or should I just add that option myself? |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.04.28 17:56:00 -
[7] - Quote
Sorry for the late replies, I was sure I had added notifications for this topic, but it doesn't seem to be working.
About parsing decimals, I believe it should be working, but if there are any bugs let me know and I'll fix it asap.
About the caching, every page is cached locally by Windows, assuming you are running that. I'm not entirely sure how it works under other OS, feel free to provide some feedback. So unless you clear the IE cache, the returned data is available there and is used by the library on subsequent requests. The caching part was written very quickly, and isn't very robust. I will implement a custom cache in the near future.
If you however want to write your own, you simply need to implement the IRequestHandler for complete control, or use CachedRequestHandler which already implements IRequestHandler with some default logic for caching.
Again, I'm really sorry for the late replies, I simply haven't checked this for a while assuming I would get notified. Bugs and other requests are normally responded to within a day.
|

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 09:23:00 -
[8] - Quote
Updated with much improved cache handling, and various other minor fixes. Starting work on CREST support, which should be ready shortly. |

RO ALEXANDER
S0utherN Comfort DARKNESS.
0
|
Posted - 2014.05.05 10:08:00 -
[9] - Quote
Icahmura Hasaki wrote:Updated with much improved cache handling, and various other minor fixes. XML files are stored in /AppData/Roaming/EveLib/Cache by default on windows, or under ~/config/... on most other platforms, though this can be changed with app.config.
Starting work on CREST support, which should be ready shortly.
Found a bug in the update, app crashes in the Store() function, namely the "File.WriteAllText(Config.CachePath + Path.DirectorySeparatorChar + GetUriHash(uri), data);" line. It's because the directory is not created anywhere in the app, and I assume that when you ran it yourself, you already had that path.
|

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 10:22:00 -
[10] - Quote
Oh, I had that sorted at some point, but seems it didn't make it to the sync. It's fixed now. Let me know if there is anything else  |
|

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 11:24:00 -
[11] - Quote
Basic CREST support has been added using dynamics. All current endpoints should be working. Not sure if I want to spend too much time on it in it's current state as things may likely change still. But if there are requests for it, I can add more robust handling for the current CREST endpoints.
Also added a UserAgent option in App.config, as CCP wants you to use your applications name when requesting data. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 11:30:00 -
[12] - Quote
And it seems I had missed the new PI endpoints on the API. I'll be adding those now, along with the other things that changed in the last two API updates. And I'm still taking requests for APIs or features you want to see in EveLib. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 11:40:00 -
[13] - Quote
I do not participate in PI, making it hard to test these endpoints. Would someone be willing to share an API key for a PI characters for an hour ? You can delete the key afterwards, or if you're willing to leave it enabled I can write some tests as well. Just send me a PM with the key if you're willing to help out  |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 12:23:00 -
[14] - Quote
The library has been updated to support the newest version of the API, which includes the addition of four PI endpoints and some other minor changes in existing ones. However, as I do not have access to an API key for PI, absolutely nothing has been tested. I'll need some help with that. |

Kendra Zane
Working From Home
5
|
Posted - 2014.05.05 21:04:00 -
[15] - Quote
Is this thread safe? I've used another library for a while and found much to my annoyance that is isn't. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 21:18:00 -
[16] - Quote
It should be thread safe, all though I haven't tested it with that in mind. Though, if any issues arise I'm sure I can have it sorted. You cannot however use a shared cache for multiple instances of the library at the moment, so keep that in mind.
If there are any requests for being able to share the cache, I can have implement that too. But I think one of the local proxy solutions would solve that problem in a better way. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.05 21:26:00 -
[17] - Quote
After giving it some thought, I can think of a few things that aren't thread safe, but these are mostly minor issues that I can probably have fixed tomorrow. If you would like to use it in a threaded environment and provide me with bug reports I'm sure we can get rid of them pretty fast. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.06 12:17:00 -
[18] - Quote
I've made a few changes, and it should be thread safe now. In fact it already was, but I've made some optimizations here and there. Please let me know if I've overlooked anything  |

Hel O'Ween
Men On A Mission
76
|
Posted - 2014.05.06 13:33:00 -
[19] - Quote
RO ALEXANDER wrote:however I might be mistaken but there are certain data pieces (logs, assets list, journal) that are not stored on Eve's CDN and you only get one chance to get the data.
As for journals: you can't get them past a certain date (1 month), but you certianly can retrieve them as often as you like during that period.
Same's true for assets. What you miss ofc is the change of assets in between two cache calls:
- pull API the first time, caching starts - add item A to your assets - remove item A from your assets - caching expires, pull API a second time
From an asset API POV, item A has never existed. EVEWalletAware - an offline wallet manager. |

Icahmura Hasaki
eZet Trade Consortium
2
|
Posted - 2014.05.06 14:36:00 -
[20] - Quote
I know the /char/Killlog endpoint won't return any data after the first request, until the cache has expired. Are there any other endpoints with similar behavior?
Also, added basic implementation for Zkillboard.com. However, make sure you read https://neweden-dev.com/ZKillboard_API before using it, as they have quite a few limitations and rules for usage, and incorrect use will get your IP suspended.
|
|

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 10:47:00 -
[21] - Quote
**Warning Stupid Question""
I have spent a load of time this year teaching myself C# and had been doing ok thus far trying to create my own industry app as a means to lean the language, so in short I have worked a load out but am still a noob.
I have created some code that does a very basic job of pulling info from the API but have decided to use this far superior library for the task so that I can focus on the actual task at hand.
Could some kind person explain to me how I can add Evelib to my project? when I try and add existing project and add in each part of the Evelib solution I get a load of namespace reference errors so I must be doing it wrong.
All I want access to is EveCentral and the ability to fetch from the authenticated API (eg assets, wallets etc)
Thanks in advance.
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 11:17:00 -
[22] - Quote
That's a valid question. You will need 3 modules, EveLib.Core, EveLib.EveCentral and EveLib.EveOnline. The reference errors you are seeing, is most likely because you need to add a reference to EveLib.Core in EveCentral and EveOnline. Assuming you are using VS: With all 3 projects in your solution, you will see a sub-item under each project called "References". Rightclick this, select "Add reference", select EveLib.Core under "Solution -> Projects". Do this for both EveCentral and EveOnline, and you should be good to go.
Let me know if you're still having issues. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 12:07:00 -
[23] - Quote
Great, thanks! that cleared up the errors... still having issues getting the using eZet.EveLib.Modules to work but again I may be missing somehting |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 12:16:00 -
[24] - Quote
You're not entirely clear on what isn't working, could you be more specific? eZet.EveLib.Modules is just a namespace. I do however recognize that the library isn't distributed in a very user-friendly manner at the moment, though I'm not sure what would be the best way to distribute it either.
edit: Oh, I misread. You need to add EveLib.EveCentral and/or EveLib.EveOnline as a reference in the project you want to use it in, the same way you did with Core. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 12:20:00 -
[25] - Quote
Cryten Jones wrote:Great, thanks! that cleared up the errors... still having issues getting the using eZet.EveLib.Modules to work but again I may be missing somehting
Never mind, worked it out, thanks |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 12:20:00 -
[26] - Quote
Icahmura Hasaki wrote:You're not entirely clear on what isn't working, could you be more specific? eZet.EveLib.Modules is just a namespace. I do however recognize that the library isn't distributed in a very user-friendly manner at the moment, though I'm not sure what would be the best way to distribute it either.
edit: Oh, I misread. You need to add EveLib.EveCentral and/or EveLib.EveOnline as a reference in the project you want to use it in, the same way you did with Core.
LOL got there at the same time :-)
|

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 12:26:00 -
[27] - Quote
On a side note:
When I request something from the API, lets say the asset list for a character. What is the return format?
On the project I did myself I processed the API XML into a datatable and returned that.. what is the return format in and what would be the best method for loading that into a table ?
Thanks |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 12:40:00 -
[28] - Quote
The API parses the XML and returns an object, depending on the request you make. The EveOnline module returns objects of the type EveApiResponse[T] (cant use html tags) where T is specific to the request, EveCentral uses EveCentralSomeName where SomeName depends on the request.
There are more specific examples in the github readme.
edit: As a follow up, the best way to insert it in a db would be to convert the API objects into the domain models/data models you use for your database, and then insert those into your database. To convert you can use a simple mapper that reads the data from the API object, and maps it to a new domain object. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 12:53:00 -
[29] - Quote
You are already out of my knowledge here..
I was hoping that I could call character.assetslist(keyData) and get the data back but I can't even work out what the options for T let alone data models etc :-)
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 12:56:00 -
[30] - Quote
A specific example for asset list would be:
var key = new CharacterKey(12345, "someVcode"); var character =key.Characters.Single(c => c.CharacterName == "Icahmura Hasaki"); var result = character.GetAssetList(); // or replace var with EveApiResponse[AssetList]
Keep in mind [ ] is a repacement for HTML style pointy brackets if you aren't used to generics. Anyone know if you can get around the forum limitations for showing these?
You can then use intellisense or some other code completion too see the available properties on result, or you can check the source or debug the object to see what's available. In most cases it follows the XML structure, but some properties are slightly renamed for clarity.
|
|

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 13:22:00 -
[31] - Quote
That's done it! I could not work out the link between the key object and the character object where all the methods live :-)
I am doing most of my data heavy lifting on the SQL side as I know this so your library is all about raw data into database tables where it can be processed with stored procedures.
For multiple accounts should I be creating a new key / char pair for each specifically of is there a neat way to loop though reusing the same objects by just modifying the values?
I was thinking key.vcode = 1234 would allow me to reset the vcode so something new but it seems to be only a get option
Thanks for all the help |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 13:31:00 -
[32] - Quote
You need to create a new key object for each API key you want to use, for various design reasons. They are lightweight though and has no impact on anything really :)
You can loop through all characters available for a key by iterating key.Characters, as a normal list. Or you can select a specific one by ID or Name like I showed above. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 13:37:00 -
[33] - Quote
So if I am pulling a list of chars with their key data from the database and then looping though the x number I have .. do you have any advice on how to programatically create x number of new key objects?
Totally understand if you have had enough at this point :-)
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 13:44:00 -
[34] - Quote
Place the key data in some enumerable structure, like a List[KeyData] of KeyData objects with a Id and vcode property, or a Dictionary[int, string] with id and vcode respectively.
Then iterate through it like so:
Quote: foreach (KeyData data in KeyDataList) { var key = new CharacterKey(data.Id, data.vCode); foreach (Character character in key.Characters) { EveApiResponse[AssetList] assets = character.GetAssetList(); // process assets } }
Just keep asking questions, I dont mind helping. I'm sure there are others that can use the information aswell :) |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 13:57:00 -
[35] - Quote
I should add that you shouldn't hammer the Eve API though. Doing this for a few characters/keys is fine, but don't do it for a 5000 man corporation.
Creating CorporationKey or CharacterKey is lightweight, and you can creates millionsof these. But as soon as you query key.Characters or any other property on the key (besides KeyId or VCode obviously), the API lazily loads all it's properties and available characters. So if you need to query a lot of keys or characters you should follow CCPs guidelines for amount of queries. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 14:10:00 -
[36] - Quote
And another thing, depending on if you check the validity of the keys beforehand or not, you should add checks for that too.
If you have few keys, you can check it by using key.IsValidKey which returns a bool value. Keep in mind though that this DOES query the api endpoint immediately.
If you have many keys, or a few keys that are expected to be correct, you can catch InvalidRequestException instead, and check if the InnerException.Response.StatusCode == HttpStatusCode.Forbidden instead, which means the key is invalid or doesn't have the right permissions. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 14:35:00 -
[37] - Quote
This is for personal use on 4 toons over 4 accounts so it should be light.. I hope...
I am trying to do a foreach(AssetsList.Asset item in assets) where assets is my EveApiResponse[AssetList]
This is saying that your type does not have a getEnumerator so I guess that's a no show.. how else can I loop thought the data ?
edit: eg. I am going to get an asset list for a specific character not looping though for the characters |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 14:53:00 -
[38] - Quote
The assets structure is somewhat complicated as assets can contain other assets and so on.
First off, you have to get response.Result to get to the request specific data, for all EveApiResponses objects.
EveApiResponse[AssetList].Result has a a property Assets, which is a collection of Asset objects. Asset objects are a top level object, which is bound to a location in eve. Each Asset object can be a regular item, or a container. It has a property called Items, which is a list of contained Item objects. Each Item object can again have a list of contained Item objects, available in a list called Items.
So basically it's a tree with unknown depth, and you need to navigate it as such.
To find the top level assets you simply iterate response.Result.Assets, where response is the EveApiResponse.
foreach (AssetList.Asset asset in response.Result.Assets) { // do work }
|

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 14:57:00 -
[39] - Quote
So if I don't care about WHERE an item is but only how many I own and other things like singleton status etc will that get me everything or do I HAVE to itterate though
Are you a container > Yes> OK what do you have in you ?
All I am trying to get to is a dataTable that lists all the things that I own across all the characters. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 15:01:00 -
[40] - Quote
All the data is in there, but you do have to iterate through to get it all. You can check if something contains something by checking if Items.Count == 0 or not, on any Item or Asset.
If you have previously done this in your own code, it's basically exactly the same structure, since it reflects the structure of the returned XML. |
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 15:15:00 -
[41] - Quote
Ok, so I have changed structure of the AssetList class slightly. I won't normally make changes to the public API, but I don't think many are using it yet and the change does make quite a few things a lot easier.
response.Result.Assets is now response.Result.Items, and everything is Item objects now, with a LocationId of 0 unless it's a top level object. Also all contained items are in a list called Items.
I've also made a few other updates and fixes that doesn't change the public API, so if you want to download the newest version you should, before implementing too much using the old asset structure.
I can write you a way to flatten the assets as well if you want ? |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 15:16:00 -
[42] - Quote
All I did was to read the API return into an IXMLDom and then just ask for each [row] element disregarding the [rowset] so getting a flat list
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 15:20:00 -
[43] - Quote
I see, that is indeed much simpler. Anyways, I'll implement a flatten function as I imagine that could be useful for others as well. The previous change to the structure is on git, and I'll have the flatten function ready in a bit. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 15:59:00 -
[44] - Quote
Added a function Flatten() to AssetList that returns a flat list with all the assets. Let me know if there are any issues :) |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 17:46:00 -
[45] - Quote
Cool, will have a play!
Do I just download the 1.2 zip file again? never understood git :-)
|

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 17:50:00 -
[46] - Quote
Also, on a totally new topic...
I want to have reasonably up to date prices in my app, and am planning a scheduled pull for what is effectively everything. This is because I then use this to generate a regular build price calculation for everything.
I have created an eve central class of my own that build multi item url's so that I am doing 10 * 90 item calls rather than 900 single item calls..
How what I don't know is:-
a: have a wasted my time again and you already do this b: am I going to get the ban hammer :-)
I do make sure that I only check for items that exist & have a market group & are published so I think I follow the rules but I would love to know your view!
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.08 18:32:00 -
[47] - Quote
Don't use the zip under releases, they are very old. If you go to the main page of the repo, you can click Download ZIP on the right side, that will give you the newest version. It would make it a lot simpler if you used a git client though, as you could automatically get the newest versions and such. But that's up to you.
The library does not automatically segment requests. For evecentral requests you pass in an EveCentralOptions object, which has a List of itemIDs. If you want to segment, you add x amount of IDs to the lis and make a request. Clear the list and add the next X ids, repeat. |

Cryten Jones
Chill Cabal The Serenity Initiative
109
|
Posted - 2014.05.08 21:28:00 -
[48] - Quote
Thanks for all the help, I'll leave you in peace for now :-)
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.10 16:00:00 -
[49] - Quote
Another few updates. I've cleaned up the separation between http requests, deserialization and caching. It should be very easy to add your own cache implementation if you want to cache using eg. a database.
I'm also currently working on providing a range of methods for retrieving some basic of the data from the static database export. This is also done through http requests though, and is not meant for heavy usage. If you need to perform complex or many queries you should use a local database.
This is however a very lightweight alternative if you only need to request some basic data every now and again. I only just implemented GetInvTypes and GetInvType as a test, more should be coming shortly.
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
3
|
Posted - 2014.05.31 13:10:00 -
[50] - Quote
I am currently working on version 2 of the library. This version will be fully async, conforming to the Task-Based Asynchronous Pattern (TAP). I'm not sure whether to leave the sync methods in or not, as there is really no reason not to use the async versions. It will also include much improved tracing and debugging functionality, using System.Diagnostics. I will also use the major version update as an opportunity to make a few minor changes to the public API, as I don't want to change the api of the version 1.
Version 1.x has a new branch called "v1", so feel free up do with that as you please. Currently, EveMarketData has been implemented as async on master, and the others will follow soon.
I would also like to say that I appreciate any thanks, input, or other comments. It would be great to get an idea of who and how many are actually using this, to keep me motivated for further development :)
|
|
|

CCP FoxFour
C C P C C P Alliance
3278

|
Posted - 2014.05.31 13:40:00 -
[51] - Quote
Hey man,
Awesome to see all the work you have been doing on this library. I have added it to the Wiki list of EVE API libraries here: https://wiki.eveonline.com/en/wiki/EVE_API_Libraries
You probably wont want to do it until you are done your v2 of the library but consider also adding a basic example of it's usage here: https://wiki.eveonline.com/en/wiki/EVE_API_Getting_Started
Since you are also about the only one doing .NET stuff it would be great to see a raw .NET example there as well. :D CCP FoxFour // Game Designer // @regnerba
|
|

Lien Rollard
Universalis Imperium The Bastion
0
|
Posted - 2014.05.31 14:49:00 -
[52] - Quote
Very nice work. I have a few question.
1) Do you expect alot of changes to the method names or the global structure of the library with the Async changes? (I suspect not but I'd rather ask)
2) Do you have a specific reason as to why you're not throwing Exceptions on the Contracts?
Quote:Example: - Contract.Requires(options.Stations != null);
Why not (general exception, could be more specific): Contract.Requires < EveLibException > (options.Stations != null);
I'm asking this because the current way doesn't allow for easy feedback when something goes wrong. I've been thinking of implementing these exceptions on the version I'm using. I'll probably fork / pull request
Keep up the good work anyway. You're encouraging me to actually begin coding on a market/corp application. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.05.31 15:19:00 -
[53] - Quote
Funny you'd ask about the library changes, I've been contemplating this exact issue for the past few hours. By convention the new methods have to be named using an "Async" postfix. So the question is whether I should remove the old synchronous methods or not. And if I keep them, do I just wrap the async methods and block, or do I keep a separate fully sync implementation.
From a maintenance and clarity perspective, removing the synchronous methods would be much easier. If someone really wants to avoid using async, they can still use SomeMethodAsync().Result with the implications that causes.
I really can't seem to decide how to do it. If anyone has any input, that would be greatly appreciated.
About the code contracts, MS recommends using the non-generic version of Requires unless backward compatibility with old DataContracts versions force you use the generic one. I have to admit I haven't used CodeContracts much, and I've been considering removing it all together but haven't had the time to look into it further. The non-generic one does however also throw an Exception if the contract is violated, just not a user specified one. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.05.31 15:30:00 -
[54] - Quote
Hey, that's greatly appreciated!
I will make sure to add some examples there, once I get the public API for 2.0 finalized. I should also add that there is a pretty comprehensive readme on github, with details and code examples.
And I'll have a look at the raw example, but C# can be quite verbose at times, compared to the neater php and python examples. I could add something simple for querying an endpoint, any sensible XML parsing might take too much space though. |

Lien Rollard
Universalis Imperium The Bastion
0
|
Posted - 2014.05.31 15:31:00 -
[55] - Quote
To be honest, multithreading is the way most applications run these days. Due to the Await-Async implementation it has made the usage of multithreading alot easier. I hardly use non-async methods these days.
However I understand some people refraining from the multithreading. Personally I would go with the "Async" postfix with the non-async methods being blocked versions of the async ones. It allows for easier debugging & testing since you're basically testing the same in 2 seperate "methods".
I feel a user of a library is still responsable for how he/she handles the return of the methods exposed inside it. If the user feels like using the non-Async methods, the user should know the implications. Same for the async methods.
About the Code Contracts, thanks for the information. I never used Contracts before mostly due to never hearing about it till now. If you go about removing it, would you go back to the normal if-else clauses or search for different solution? |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.05.31 15:43:00 -
[56] - Quote
Yes, I will probably keep the old methods, and just add Async versions of them.
About the contracts, I'm not entirely sure the library needs it. The parameters aren't very complex, and are well documented by both the relevant API documentation (eve central, eve marketdata and so on) and in the comments for each method.
If you want to use code contracts however, you should probably download http://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970 if you're using visual studio.
I'll probably keep them around for version 2 at least, but as always feedback is welcome. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.05.31 17:23:00 -
[57] - Quote
I've updated all modules, except EveOnline.Image, to include Async versions of all methods. What is available on the master now will be the final API for version 2.0, bar minor bugs that might have passed the unit tests.
I might add support for progress reporting and task cancellation, but in a way that doesn't affect the current api.
I would greatly appreciate any feedback or help with debugging the async methods, as well as the regular ones.
Also, keep in mind that async does not mean that the library is automagically multithreaded. Some methods may still be CPU bound during deserialization. However, the library shouldn't block on any IO operations (disk access, web requests) if you use the async api. |

Lien Rollard
Universalis Imperium The Bastion
0
|
Posted - 2014.05.31 17:56:00 -
[58] - Quote
I have forked your Library and am adding a small module for EMDR (for those who want to have the data directly instead of via Eve-Central/Market/Etc)
Very nice work on the v2.0 api. That was quick! |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.05.31 22:34:00 -
[59] - Quote
It seems I was a bit too quick on the trigger regarding the final API. I need to figure out how to deal with the lazy loading of properties in CharacterKey and CorporationKey.
My current options are: Provide a separate method, InitAsync(), which loads all properties in async fashion. Accessing any properties for the first time without first calling InitAsync(), will load the properties synchronously.
Provide properties which lazy loads synchronously (as it is currently), and a separate method named GetSomePropertyAsync(), which provides the async behaviour. I don't like the fact that I'll have to mix properties and methods for accessing the same fields though.
Provide properties named SomePropertyAsync, which lazy loads asynchronously. This might be the most elegant solution, but it also seems to go against many conventions for properties, and isn't directly supported so I'd have to use some dirty code.
Remove all properties, and only provide methods, like GetSomeProperty() and GetSomePropertyAsync(). This will make the API more consistent than mixing properties for sync and methods for async operations, but will break backwards compatibility for this part of the api.
Any input would be welcome  |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.01 11:46:00 -
[60] - Quote
So I've narrowed it down to option 1 or 4, unless someone has any other ideas.
Option 1 would preserve current functionality, but with an added InitAsync() method. So if you want to use it synchronously it would be used as it is now, and if you want async, you would need to call this explicitly before accessing any properties. So following InitAsync, all access to properties will be instant without the need for any async methodology. And obviously you don't have to call InitAsync on object creation, you can defer it to a point where you are certain you will have to load the data.
Quote:CharacterKey key = await new CharacterKey(keyId, vCode).InitAsync(); string accessMask = key.AccessMask; Character c = key.Characters.First();
Or the other option, which avoids the explicit initiation and allows lazy loading of the data on demand, but also requires async methodology for access to each property on the key.
Quote:CharacterKey key = new CharacterKey(keyId, vCode); string accessMask = await key.GetAccessMaskAsync(); Character c = (await key.GetCharactersAsync()).First();
I've currently implemented both, but this makes the API unnecessarily complex, so I'll be removing one of them. I'm currently leaning towards using the first option, but I'm fairly new to TAP and .NET in general so any input would be welcome :) |
|

SCORPl0
Epsilon Lyr Mordus Angels
1
|
Posted - 2014.06.02 15:03:00 -
[61] - Quote
Hey there,
Thanks for your api that will be definitely our choice for create a new alliance website.
Any idea of an existing simple C# forum that we can easily modify and incorporate api calls?
If someone used already this api for forums eve related functions.
Thanks anyway. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.02 17:30:00 -
[62] - Quote
I cant help with any C# forums, as I've never used one. Please let me know if you run into any issues with the API though, or any issues in combining it with a forum, and I'll help you figure out a solution :) |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.03 18:36:00 -
[63] - Quote
A beta version of 2.0 is tagged and available on github. I'm using it in production and it's stable thus far. It isn't fully backwards compatible with version 1, but it shouldn't require too many changes to swap.
New features include async variations of all endpoint methods, better tracing, ApiKey class that can be used for keys when you don't know in advance if it's a corporation or character key, and other minor improvements. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.04 11:20:00 -
[64] - Quote
I've added support for the newest endpoints as stated here:
Quote:2014/06/03:
Added the new /corp/CustomsOffices endpoint to the EVE API New POCO endpoint requires a Director or CEO corporation API key with the asset list access mask A new Wars resource was added to public CREST with /wars/, /wars/war_id/, and /wars/war_id/killmails/all/ Removed WH systems from the maps/kills endpoint.
I've also made some major improvements to the caching, but had to slightly change the IEveCache interface to accommodate async if anyone has made custom caching.
And I've added lots of tracing statements, mostly in the cache implementation, but a few others too. If you wish to trace, define a System.Diagnostics listening source for "EveLib". This is part of the .NET framework and there is lots of documentation available, or you can ask me for assistance.  |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.11 15:49:00 -
[65] - Quote
I've just pushed a fix to a major bug with the caching, introduced with the "improved" caching in 2.0. Anyone using 2.0 beta should update as soon as possible, as caching would not work correctly in most cases. |

Hel O'Ween
Men On A Mission
81
|
Posted - 2014.06.12 16:24:00 -
[66] - Quote
SCORPl0 wrote: Any idea of an existing simple C# forum that we can easily modify and incorporate api calls?
You could try YetAnotherForum.NET.
Fun fact: that's the forum software you're using in this very moment, as the EVE forums are based on YAF (and to which CCP contribute back, when they modified it to their need). EVEWalletAware - an offline wallet manager. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.13 13:51:00 -
[67] - Quote
So, I've had another go at version 2, and made a few additions to the API. I will be writing a new readme for version 2 as soon as possible.
In other news, I've finally found the time to fiddle with NuGet. I've just uploaded EveLib 2.0-beta2 to NuGet, available here.
I've never used NuGet before so there might be something I've missed, but I think it should work correctly. I've also uploaded PDBs and sources to SymbolSource, which can be set up in VS.
Hopefully this should make it easier to install and use. And as always let me know if there are any issues. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.17 16:40:00 -
[68] - Quote
Another update, quite big this time. There are no changes to the public API though.
Implemented proper CREST support for all endpoints. No more dynamic objects. Added an EveCrestException, with the exception data returned by CREST. Added comments to the public methods in EveCrest, and some other places. I've added some missing Code Contract statements, and I've configured it properly for release and debugging. Fixed many issues with the Nuget package. It should now include all XML documentation, as well as Code Contract assemblies for all dlls.
I've also moved the Nuget package, to eZet.EveLib. The old ID has a dependency that links to the new package, but you should uninstall the old package, and install the new one. I'm sorry for any inconveniences this causes, but EveLib was a bit too generic of a name, and there seems to already be other libraries using it.
I haven't really had any bug reports on version 2 of the library at all, so I'm expecting a proper release of it soon unless something comes up.
Also, if anyone wants to help me develop or maintain this, please let me know. There are a lot of features and improvements that can be added still, and you're welcome to contribute. The documentation also needs improvement, if that's your cup of tea. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.18 10:54:00 -
[69] - Quote
Apparently, there was a small bug with the PI endpoints, and as I don't have any PI characters this hasn't been tested until now. A kind soul has given me his API key, I've fixed the bugs and added proper unit tests and static deserialization tests. The fix is pushed to git and will be on nuget shortly. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.18 16:13:00 -
[70] - Quote
I've added full support for the ZKillboard API, including caching, proper model classes and corresponding unit tests.
I've also made quite a few changes internally, which affects anyone who've made their own implementations of IRequestHandler or IHttpRequester. In short, I've removed IHttpRequester and it's implementations, and moved it's functionality into the RequestHandler.
The implementation of HttpRequester can mostly be replaced by a static call to HttpRequestHelper.RequestAsync(uri), it should be easy to make the required changes if you look at the new source.
The reason for this is to have more control in the RequestHandler, so that you can easier retrieve http headers and the like, which is needed for caching. The HttpRequester did very little anyways, and I don't think any alternative implementations are likely or necessary. |
|

Lien Rollard
Universalis Imperium The Bastion
0
|
Posted - 2014.06.18 19:26:00 -
[71] - Quote
Awesome work so far. I've been looking into several small projects to do (all the documentation and scope first) and I'll probably begin coding tomorrow.
One work I do have is if you have a timer on when the implementation of the new Crius Industry API will begin? (Merely because several of my small projects include industry).
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.18 19:44:00 -
[72] - Quote
It should be ready when Crius is released, or shortly after. :) |

Lien Rollard
Universalis Imperium The Bastion
0
|
Posted - 2014.06.18 20:18:00 -
[73] - Quote
Ah, I was asking because they apparently opened the API up for testing (in their latest Dev Blog). |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.19 12:40:00 -
[74] - Quote
I've added full support for the EveWho API, which means all APIs I initially intended to include, have been implemented. If there are any requests for others, please let me know.
I've also just started looking at the new industry API, but I do not have any sisi keys with industry jobs/history available. If someone could be kind enough to share an API key, or even a simple copy/paste of the xml response, that would be greatly appreciated. In the case of a key, I won't need it for very long.
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.19 15:53:00 -
[75] - Quote
I've pushed a new NuGet package, some of the changes are:
- Support for the new industry endpoints
- Support for EveWho.com API
- Cleaner exception handling
- Fixed IsValidKey and it's async variant
- Improved documentation comments
It does however make some changes to the public API, as I've renamed some of the classes that is being returned, to include an indicator of which module the class belongs to. This does not affect the EveOnline module.
To test the new industry endpoints, set the BaseUri property on whichever object your invoking methods on, before use, (corporation, character, keys) with new Uri("http://api.testeveonline.com/");
I've also added quite a lot to the readme on github over the last few days, so might be worth looking at that again. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.21 16:31:00 -
[76] - Quote
A new release is up...again. Available on nuget and github.
- Added support for the new CREST industry endpoints, /teams/ and /specialities/
- Changed type of BaseUri from Uri to string.
- Changed EveCrest data model prefix to just Crest.
- Added a large amount of comments, especially to the EveCrest module.
- Added some more debug traces.
- Other minor tweaks and fixes.
The library seems very stable and a stable release will be coming shortly. There should be no more changes to the existing API after that point. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.06.26 11:42:00 -
[77] - Quote
EveLib 2.0 has been released and is considered stable. I'll consider any feature requests and update bugs as soon as they are reported, but there shouldn't be any changes other than that.
As a final small feature I've added an EveLib class in Core with RequestJson and RequestXml, which lets you request content from any arbitrary uri, and have it deserialized and returned as dynamic expando objects, using the same error/exception handling as the rest of the library. Maybe someone will find it useful for APIs that aren't supported directly.
Hope the library will be useful to some, and I'd greatly appreciate any feedback, good or bad, what you'll be using it for and so on. 
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.07.05 11:12:00 -
[78] - Quote
I've updated the library with the most recent changes to sisi. The package is available on github, and as a pre release on nuget. Make sure you allow pre-release updates through nuget if you want to test this. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
4
|
Posted - 2014.07.22 13:15:00 -
[79] - Quote
I've released version 2.0.1, which adds support for all the new endpoints that came with Crius. The old GetIndustryJobs has been replaced by the new version, mirroring the way CCP has replaced their endpoint with the new one. This means that the new version isn't compatible with the old, but since the old endpoint itself is removed that shouldn't matter. |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.07.26 18:58:00 -
[80] - Quote
Hey there,
I'm trying to use your libraries to get the System Cost Index using CREST and I seem to be having some difficulties.
I am able to make the CREST request, but when I check the results, there are no items in the SolarSystems list.
Here is the code I'm using to test:
Quote:Dim crest As EveCrest Dim lstSystems As Models.CrestIndustrySystems = Nothing Dim objSystemEntry As Models.CrestIndustrySystems.SolarSystemEntry
Try crest = New EveCrest lstSystems = crest.GetIndustrySystems()
If Not lstSystems.SolarSystems Is Nothing Then For Each objSystemEntry In lstSystems.SolarSystems Debug.Print(objSystemEntry.SolarSystem.Name) Next End If
Catch ex As Exception Debug.Print(ex.Message) End Try When I run this, the crest.GetIndustrySystems() call works fine, but if I check the lstSystems.SolarSystems, it's Nothing. Interestingly enough, the lstSystems.TotalCount is correct at 5431, which is the same if I do the HTTP request manually.
I did turn on the tracing, but I didn't see anything unsual or any errors. I can provide the tracing information if it would be helpful.
Thanks for any help you can provide. I definitely like what you've got so far and I look forward to using it a lot more! 
- SZ |
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.07.26 19:14:00 -
[81] - Quote
Hey there, I'll have a look and have it fixed by tomorrow. Did you pull it from git, or are you using nuget ? I would prefer not having to push a nuget release for this bugfix alone, but if you're unfamiliar with github I could help you out. |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.07.26 19:25:00 -
[82] - Quote
I got the files from nuget, because I just wanted the DLLs. If there's a way to get the DLLs directly from github, then I'd be happy to get them from there...
But I can get the latest from github & recompile myself if that's easier.
Thanks for the quick response!
- SZ
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.07.27 12:02:00 -
[83] - Quote
So, I've tested this and it seems to be working, both the regular call and the async version. Have you tried any other endpoints? It would help if you could find out if it's only this one that doesn't work for you. I'm not familiar with VB, but I would assume it should work just fine. |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.07.27 18:12:00 -
[84] - Quote
Very confusing.
I tried these CREST endpoints, with the following results:
- /incursions/
Worked fine, all data returned
- /alliances/
Worked fine, all data returned. Was a little confusing on the returned values, but I figured it out.
- /market/prices/
Sort of worked; got the correct number of items, but each item's name was blank, and the id was 0. The prices were correct though (based on a manual browser request).
- /industry/systems/
Still gets the correct number of systems, but the SolarSystems object is nothing.
Do you have a short C# example I can try here? Maybe I'm doing something wrong, or VB.NET handles things differently.
Feel free to PM or EVEMail me if you want to take this offline.
Thanks for your help!
- SZ |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.07.27 20:33:00 -
[85] - Quote
Ok, so I fixed a bug with market/prices, which will be pushed tomorrow, that should fix the missing id and name. And if you wouldn't mind telling how the alliances/ endpoint was confusing, I could maybe fix that as well. As for the industry systems, I still can't figure out why it doesn't work, especially as all the others seem to work. What's strange is also that the list should never be null, if there are no entries it should be an empty list.
You can try this
class Test { static void Main(string[] args) { var crest = new EveCrest(); var response = crest.GetIndustrySystems(); Assert.IsNotNull(response.SolarSystems); }
} |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.07.27 22:27:00 -
[86] - Quote
Thanks for the updates.
Interestingly, your sample C# code worked fine! There must be something the VB.NET does differently, or expects some sort of different response. Or I still have it set up incorrectly (though I tried to match the C# example).
When I look at the response in C# there are 2 objects, "base" and "SolarSystems". The "base" object is of type CrestIndustrySystems and contains the two scalars "PageCount" and "TotalCount". The "SolarSystems" object is a list of SolarSystemEntry objects.
When I look at the repsonse in VB.NET, there are 3 objects, "PageCount", "TotalCount", and "SolarSystems", where the scalars are correct and the SolarSystems is Nothing.
So I guess that means for now, if I want to get the System Cost Index, I'll need to use C#! 
As for the Alliances, I was expecting to get back just a list of Alliance objects, but instead you return a CrestHref(Of CrestIconEntity). Then for each CrestIconEntity, I needed to call GetAlliance() passing the ID, which then returns the Alliance object. It works, I just wasn't expecting an intermediate layer.
Let me know if you happen to find anything regarding VB.NET, but for now I'll continue with C# and see if I can get further!
Thanks,
- SZ |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.07.30 10:45:00 -
[87] - Quote
A new version is up.
Release notes: EveLib v2.0.2
Added support for Industry/Facilities/ Added support for new version of Industry/Teams/ Fixed a bug in Industry/Systems/
|

Lucas Kell
Internet Terrorists SpaceMonkey's Alliance
4041
|
Posted - 2014.08.07 07:12:00 -
[88] - Quote
Your GetWars method doesn't pass the page though to the Async version of the method, so always return page 1.
Handy library though. Thanks. The Indecisive Noob - EVE fan blog. Wholesale Trading - The new bulk trading mailing list. Chrysus Industries - Savings made simple!
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.08.08 19:01:00 -
[89] - Quote
Thanks, I've pushed a fix for this as well as some other fixes to github. I'll be adding a nuget release in a week or so. |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.08.17 04:30:00 -
[90] - Quote
I'm trying to get the attribute values from a character, and it seems the charactersheet Attributes structure returns nothing.
Looking at the code, it appears that the attributes are just not being parsed from the XML when calling the API. All the other parts of the Character Sheet seem to be there (through I haven't done an exhaustive check).
Thanks,
- SZ |
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.08.17 22:43:00 -
[91] - Quote
Thanks for the feedback. I'll be travelling for the next few days, but I'll have a fix for this as well as some other bugs ready by the end of the week. As usual I'll post it here, and I'll update Nuget as well. :) |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.08.22 05:20:00 -
[92] - Quote
Would it be possible to give an example of how to access some of the asset information? I can get the asset list of a character through the "character.GetAssetList()", and all the assets I expect are there. But I'm trying to get additional information such as name, group, location, etc.
For example, if I have an asset, one of it's properties is "typeID". Now we should be able to use that to get the item's name. Is there already a lookup I can do to get the name from the typeID?
Same question for "locationID". I can't seem to find the lookup for a locationID to a name.
Thanks!
- SZ
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.08.22 11:01:00 -
[93] - Quote
For type names, you can use https://neweden-dev.com/EVE/TypeName
And location IDs can be used with https://neweden-dev.com/Char/Locations
Steve also has some tools to deal with locations, such as https://www.fuzzwork.co.uk/tools/api-map-data/
|

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.08.23 09:19:00 -
[94] - Quote
I've pushed a new version with the latest bug fixes to nuget. Please keep providing feedback and bug reports :) |

Dareth Astrar
Astrar Logistics and Engineering
35
|
Posted - 2014.09.12 09:49:00 -
[95] - Quote
Using the last build in NuGet, 2.0.3 I have noticed issues getting Blueprints back for a corporation.
Examination of the Cache folder shows the blueprints xml was returned correctly, but it seems to fail to be De-serialized correctly. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.09.12 11:19:00 -
[96] - Quote
Noted, I'll have a look. |

Dareth Astrar
Astrar Logistics and Engineering
35
|
Posted - 2014.09.12 11:22:00 -
[97] - Quote
Thank you sir :) |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.09.12 11:43:00 -
[98] - Quote
I must have been drunk when implementing that endpoint. I've pushed a fix to github, I'll update nuget when I've accumulated a few more fixes. Will you be able to compile it yourself?
And, did you also send me an email on the same issue? So I know if I have to reply to the email or not. |

Icahmura Hasaki
Brave Newbies Inc. Brave Collective
5
|
Posted - 2014.09.12 14:05:00 -
[99] - Quote
I've pushed a fix for a bug with the caching. This affected the Blueprint endpoint, and possibly others. After updating, you should delete/clear the cache directory. I've also fixed a bug with parsing TimeEfficiency.
Cache folder is most likely in: C:\Users\'user'\AppData\(roaming or local)\EveLib for windows users, others should know where to find it.  |

Elojs
The Scope Gallente Federation
1
|
Posted - 2014.09.14 16:35:00 -
[100] - Quote
Are there any plans to create .DLL's with static endpoints so I can write PHP wrappers to use the library?
Thanks for the work.
Paul
|
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.09.16 17:47:54 -
[101] - Quote
I hadn't really though of that, no, and I don't think I'll have time for that in the near future. It's open source though, maybe yourself or someone else can create static wrappers or come up with something else that allows interaction with php. I accept pull requests, and can also help you along the way, or make smaller changes to the library to accommodate requested features. |

Kjode Gauk
Aerodyne Collective. Brothers of Tangra
0
|
Posted - 2014.10.20 16:59:52 -
[102] - Quote
Good day,
Is there a 2.0.4 package with the blueprint fixes ready for nuget?
And thanks for the library, it's been great so far.
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.10.21 10:36:58 -
[103] - Quote
Kjode Gauk wrote:Good day,
Is there a 2.0.4 package with the blueprint fixes ready for nuget?
And thanks for the library, it's been great so far.
Oh, I actually completely forgot updating the nuget package, I meant to do that weeks ago. I'll have it up by the end of the day, thanks for reminding me. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.10.21 12:03:16 -
[104] - Quote
A new nuget release is up with all the latest changes. Please let me know if you find any bugs or have any feature requests. |

Kjode Gauk
Aerodyne Collective. Brothers of Tangra
0
|
Posted - 2014.10.21 14:31:49 -
[105] - Quote
I've cleared the cache, made sure the dll were the new version (2.0.4) and I'm still issues when I try to get the blueprints with the following code.
return eZet.EveLib.Modules.EveOnlineApi.CreateCharacter(cred.APIKey, cred.vCode, cred.CharacterID).GetBlueprints();
I've checked the cache in the Roaming profile and it seems like the XML is downloaded correctly, just that the parsing fails again.
Problem might be some sort of DLL hell on my end, but if you can confirm that the new version has the fix for BPs?
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.10.21 17:25:19 -
[106] - Quote
It should be fixed, yes. Could you send me a copy of the blueprints.xml file, lars.dahl on gmail?
edit: Make sure it's the cached version, not directly from the API. Also, have you tried compiling it from github? If so, does that work, or not ? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.10.22 12:55:08 -
[107] - Quote
New version is up on nuget, remember to clear your cache if you're having problems. Please let me know if there are any issues still. |

Kjode Gauk
Aerodyne Collective.
0
|
Posted - 2014.10.22 17:12:43 -
[108] - Quote
Seems to be work fine now.
Thanks. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.03 15:15:38 -
[109] - Quote
I've posted a Phoebe pre-release to nuget. This release adds support for all API changes coming with Phoebe. I've also added documentation comments for all remaining public properties and methods, and done some general cleanup. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.11 09:28:55 -
[110] - Quote
The phoebe version was released on nuget a few days ago, as always let me know if there are any issues. There were quite a few changes to the API, but I think everything is working correctly. |
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.19 16:18:47 -
[111] - Quote
Version 2.0.5.1 is up on Nuget.
- Added support for gzip and deflate, which also fixes issues with the ZKillboard module.
- Added MaxRequests and RequestCount to the ZkbResponse, which is taken from the response header. These will be 0 if your request was served from the cache.
- Added some *Until utility methods for Transactions and Journal to Corporation and Character in the EveOnline API. These will fetch all entries until the UntilId is found, passed or we've fetched all entries. Passing in 0 will fetch everything. They also support fromID, if you don't want to start from the most recent id. All parameters are non-inclusive.
|

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.11.22 00:45:16 -
[112] - Quote
Hey there,
I seem to be having a problem lately getting the Character Sheet using GetCharacterSheetAsync(). I get an exception "There is an error in XML document (325, 3)." I believe this started happening with the Phoebe release, probably due to the implant API changes.
I'm using the latest code from GitHub, and I can get the Character Sheet normally using the URL manually. It appears to be having a problem when parsing the XML that's returned.
Let me know if there's anything other info that I can provide.
Thanks, - SZ
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.22 01:31:55 -
[113] - Quote
I'll fix it in the morning, and you're right it's probably related to the implants. I made sure it was working with my own character, but I might have missed something. I'm surprised it took this long for the bug to be reported though. Don't hesitate to contact me with bugs, as I'll usually have them fixed in a day, if only I know about them :) |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.11.22 02:22:55 -
[114] - Quote
Thanks for the quick response! I would have notified you earlier but 1) it seemed to be related to Phoebe so I figured it would be found & fixed since 2) I've been on vacation for two weeks! 
But yes, surprised it hasn't been noticed before. If you have any problem replicateing it, let me know and I can send you my API key. Maybe my character has some implant(s) that are problematic... 
Thanks, - SZ |

Warren DeMartini
United Earth Space Council
1
|
Posted - 2014.11.22 09:07:53 -
[115] - Quote
First, this is a great library (just reading through the lore and forum) and much appreciation for the time and effort you've expended not only in writing it, but also the help and support you've provided on the forum.
I'm actually writing a VB app (just started using EVE-Lib) and so converted the example code in the readme. However, the line:
MarketStat result = eveCentral.GetMarketStat(options);
translates to this in VB:
Dim result As MarketStat = eveCentral.GetMarketStat(options)
Simple enough, but VS is telling me that MarketStat is not defined, even though I have included namespace references for all the eZet namespaces. Is this a separate class that I have to build to hold the results?
-Warren |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.22 12:42:13 -
[116] - Quote
I renamed some classes a while back to avoid some name clashes. The class is named EveCentralMarketStatResponse now, and response.Result is a List[EveCentralMarketStatItem]. You should be able to determine the return value by looking at EveCentral.GetMarketStat() though, as it's all documented. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.11.22 13:02:39 -
[117] - Quote
New version is up on nuget and git, which fixes the problems with CharacterSheet. |

Squornshellous Zeta
BioDyne
0
|
Posted - 2014.11.22 19:23:14 -
[118] - Quote
The update works perfectly!
Thanks, - SZ |

Zetsubou Gakusei
Sebiestor Tribe Minmatar Republic
1
|
Posted - 2014.12.10 17:54:50 -
[119] - Quote
Any news about Rhea and authed CREST support? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
6
|
Posted - 2014.12.10 18:25:13 -
[120] - Quote
Rhea should be fully supported already, as far as I'm aware. I just ran the unit tests and they all passed, though they are very rudimentary so there might be some missing data due to parsing errors still. I've just pushed a few minor crest related bugfixes to github that I'll get on nuget when I've accumulated a few more.
As for authed crest, I'm not sure how to incorporate it in a way that makes sence. Since the SSO requires a callback url and browser interaction and so on...
If anyone has ideas or suggestions for how I could incorporate it in a meaningful way, please let me know. |
|

Zetsubou Gakusei
Sebiestor Tribe Minmatar Republic
1
|
Posted - 2014.12.10 18:52:54 -
[121] - Quote
Icahmura Hasaki wrote:Rhea should be fully supported already, as far as I'm aware. I just ran the unit tests and they all passed, though they are very rudimentary so there might be some missing data due to parsing errors still. I've just pushed a few minor crest related bugfixes to github that I'll get on nuget when I've accumulated a few more.
As for authed crest, I'm not sure how to incorporate it in a way that makes sence. Since the SSO requires a callback url and browser interaction and so on...
If anyone has ideas or suggestions for how I could incorporate it in a meaningful way, please let me know.
I'm not really an expert but I have had some experience with APIs such as facebook. Facebook too has a web-only login, the popular .net APIs solve it by making the user open the facebook API login from a browser control popup, do the login and then getting back the returned token to the application. I can't go into more detail because I don't really know how the backend works, I did use it this way and it works great with the .net browser control, non need for external implementations or anything.
I hope the same method (or a similar one) can apply with the SSO.
Also is there any reason this library shouldn't work with asp.net? In that environment it should be even easier to get the required auth tokens since the client is already in a browser (again, I'm not an expert so I could be saying something completely stupid) |

Icahmura Hasaki
Bearded BattleBears Brave Collective
7
|
Posted - 2014.12.10 19:37:00 -
[122] - Quote
What you're saying is perfectly doable, but I don't think it should be a part of the library. It's up to the library consumer to manage interaction with the end user, which includes managing the SSO authentication and handshakes and manage access tokens. Once you have the access token, that can be passed to EveLib and be used for authenticated CREST. But I'm not sure I want anything related to managing SSO and authentication to be included.
If anything I could create a separate library for that, but the SSO protocol is very straight forward and would only take a few minutes to code, so I'm not sure there's much value in it. |

Zetsubou Gakusei
Sebiestor Tribe Minmatar Republic
1
|
Posted - 2014.12.10 19:55:26 -
[123] - Quote
Icahmura Hasaki wrote:What you're saying is perfectly doable, but I don't think it should be a part of the library. It's up to the library consumer to manage interaction with the end user, which includes managing the SSO authentication and handshakes and manage access tokens. Once you have the access token, that can be passed to EveLib and be used for authenticated CREST. But I'm not sure I want anything related to managing SSO and authentication to be included.
If anything I could create a separate library for that, but the SSO protocol is very straight forward and would only take a few minutes to code, so I'm not sure there's much value in it.
I see, so at least will you add the authed CREST endpoints? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
7
|
Posted - 2014.12.10 20:00:47 -
[124] - Quote
Yeah, you will be able to use authed crest, but you'll have to get the access token elsewhere. I'm not really up to date on authed crest though, is it available yet ? |

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.10 20:14:19 -
[125] - Quote
Icahmura Hasaki wrote:Yeah, you will be able to use authed crest, but you'll have to get the access token elsewhere. I'm not really up to date on authed crest though, is it available yet ? It came out with Rhea, it's already up and working and various devs are already implementing it in their applications, right now we got the market orders available for use |

Icahmura Hasaki
Bearded BattleBears Brave Collective
7
|
Posted - 2014.12.10 20:20:56 -
[126] - Quote
Oh, I see now. Give me a few minutes :) |

Icahmura Hasaki
Bearded BattleBears Brave Collective
8
|
Posted - 2014.12.10 20:39:43 -
[127] - Quote
So I got the auth working. I'll probably need a few days to do this properly, as I'm quite busy these days. I'll post back when I release it on Nuget :) |

Icahmura Hasaki
Bearded BattleBears Brave Collective
9
|
Posted - 2014.12.16 19:30:53 -
[128] - Quote
I've pushed a beta release to nuget, which brings Authed CREST and a lot of other improvements. More importantly, the EveLib.EveCrest module is NOT fully backwards compatible. I've refactored a lot of the code and the models, but it shouldn't take long to find and fix the errors if you do update.
Major changes
- Full support for authenticated CREST. Set a valid AccessToken and Mode to Authenticated on your EveCrest instance.
- EveLib.EveAuth.EveSso: A very basic helper class for managing SSO.
- EveCrest.Load() can be used to load any CrestHref or CrestLinkedEntity instances.
- Added support for the versioning provided by CCP for Crest. Crest will now emit a warning for deprecated resources, and optionally throw an exception.
- Added support for some additional Crest resources, more will come.
- Lots of cleanup, more consistent naming scheme
Next on the list, I intend to improve on the Load() feature, adding a way to load the resource without having to pass it to an EveCrest instance. I would also like to implement deferred execution for CREST as a whole, possibly in a new module with no static entry points. |

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.17 08:19:13 -
[129] - Quote
Thanks for the update! I've been using the library in the past days and I've always been positively pleased. Can't wait to play with SSO now! |

Icahmura Hasaki
Bearded BattleBears Brave Collective
10
|
Posted - 2014.12.17 08:38:00 -
[130] - Quote
No, 2.1.0-beta1 is the latest release. You have to select it manually on the Nuget page, or change the settings on your client to allow pre-releases. I'm currently working on it, so might have another version up by the end of the day.
Please let me know if you have any issues or if something's unclear with the new stuff :) |
|

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.17 14:40:41 -
[131] - Quote
After taking all morning to manage to figure out how to manually get the SSO token I looked into your source and found out that you implemented the whole token request part >_<
I was somehow under the impression that I had to do it myself for some reason and went ahead and did my own (awful) thing...
Also I laughed too hard at the "360 noscope" comment in the source, just letting you know |

Icahmura Hasaki
Bearded BattleBears Brave Collective
11
|
Posted - 2014.12.17 14:58:08 -
[132] - Quote
Been working at it all day, in fact :) Glad to hear you've found it useful though. Just finished up some last things now, before I'm done.
Got a lot of cool stuff coming, such as automatic token refreshes, lambda queryable crest resources and more. |

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.17 15:04:54 -
[133] - Quote
Icahmura Hasaki wrote:Been working at it all day, in fact :) Glad to hear you've found it useful though. Just finished up some last things now, before I'm done.
Got a lot of cool stuff coming, such as automatic token refreshes, lambda queryable crest resources and more.
I'm kind of stuck on the actual authentication right now, the application gets stuck right after I authenticate and try to retrieve values from the token, probably due to my inability to use await and async
I tried:
var authResult = EveSso.Authenticate(encodedAuth, code);
Response.Write(authResult.Result.AccessToken); //writing to the page the token so I can check it worked
I'm probably doing it wrong, what's the correct way? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
11
|
Posted - 2014.12.17 15:09:10 -
[134] - Quote
That should work, all though it might hang a bit since you're not using await. Are you sure the encodedAuth and Code is correct? You have to manually copy the Code from your browser after logging in, if you're not doing that already. |

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.17 15:10:41 -
[135] - Quote
Icahmura Hasaki wrote:That should work, all though it might hang a bit since you're not using await. Are you sure the encodedAuth and Code is correct? You have to manually copy the Code from your browser after logging in, if you're not doing that already. I'm doing that in asp.net so I already got the login and the callback working, the code is correct and the encoded value is right too, I just can't figure out how to use the async because I'm not very experienced on the subject |

Icahmura Hasaki
Bearded BattleBears Brave Collective
11
|
Posted - 2014.12.17 15:12:33 -
[136] - Quote
Well, it should work like that too. To test it async you can simply wrap it
public async void test(your parameters) { var authResult = await EveSso.Authenticate(encodedAuth, code); Response.Write(authResult.AccessToken); //writing to the page the token so I can check it worked
}
I've added much better error handling to EveAuth on github, that might help you out. The version on github was just a quick draft to get something working to test it out.
Drop by IRC, easier to communicate http://irc.lc/coldfront/eve-dev/ |

Zetsubou Gakusei
All-Out
1
|
Posted - 2014.12.17 15:23:20 -
[137] - Quote
Icahmura Hasaki wrote:Well, it should work like that too. To test it async you can simply wrap it public async void test(your parameters) { var authResult = await EveSso.Authenticate(encodedAuth, code); Response.Write(authResult.AccessToken); //writing to the page the token so I can check it worked } I've added much better error handling to EveAuth on github, that might help you out. The initial version that is on nuget was just a quick draft to get something working to test it out. Drop by IRC, easier to communicate http://irc.lc/coldfront/eve-dev/
I'm already on there actually, if you were online you probably should have seen my struggle through the day in getting this stuff to work |

Icahmura Hasaki
Bearded BattleBears Brave Collective
11
|
Posted - 2014.12.17 16:58:51 -
[138] - Quote
A new update is up no NuGet.
Since I've already made some breaking changes to the coming version, this includes a few more. I've done a major cleanup of namespaces and class names. The EveOnline API module has NOT been changed at all. All modules now live in their own namespace, instead of a common Modules namespace. Most Model classes that had a Module prefix have had that removed, resulting in much shorter class names. It should generally be easier to find the classes you need, and any capable IDE should be able to detect and fix the all the changes. All API methods and similar stay the same.
New features
- EveCrest now supports refresh tokens with optional automatic refresh
- EveCrest now supports a LINQ like query structure. EveCrest.GetRoot().QueryAsync(r => r.Alliances). Used EveCrest.Load() internally.
- EveCrest.Load() has been improved.
- EveAuth has been improved with better error handling, and a Verify(token) method.
- Implemented ALL remaining CREST resources. Parsing bugs may still exist, please let me know.
If anyone wants to update but are afraid of things breaking, contact me and I'll help you out. The changes are very straight forward to fix, it's mostly just a matter of removing or adding a part of the name space or class name. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
11
|
Posted - 2014.12.18 13:17:19 -
[139] - Quote
Another pre release is up. This fixes a bug as well as adding some features.
New features
- You can now set an AuthedMaxConcurrentRequests and PublicMaxConcurrentRequests in EveCrest.RequestHandler.
- You can now pass IEnumerables to EveCrest.Load() and CrestResource.Query().
- Added sync wrappers for EveCrest.LoadAsync() and CrestResource.Query().
- Improved error handling for EveAuth and EveCrest, including some special cases.
- Improved token management, smarter automatic token refreshes
- Implemented the last CREST resource, MarketOrders. CREST support should now be complete.
- Implicit inferring of IDs for resource links if CREST doesn't return one explicitly. If no ID is set, it will attempt to extract one from the URI. You can check IsIdExplicit to see if the ID was set explicitly or not. If it was not explicit and inferring it failed (the resource doesn't have an id) the ID will be negative. I don't think this can occur with the current state of CREST, but you never know.
Bugfix: I fixed an issue with beta2 that caused all requests to use Authenticated mode. |

Erik Kalkoken
The Great Harmon Institute Of Technology Enemy Spotted.
14
|
Posted - 2014.12.18 19:22:32 -
[140] - Quote
Great job! Will check it out on my next c# project. |
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
14
|
Posted - 2014.12.19 16:05:31 -
[141] - Quote
Another update is out on nuget, a final release of version 2.1.0 will probably be out shortly.
You can no longer switch between authenticated and public mode after instantiating the EveCrest object, since all resources hold a reference to it and use it for queries.
I've added two new ctors which enables authenticated mode, one takes an access token, and the other a refresh token and an encoded key. The default ctor uses public mode.
Automatic paging for LINQ queries A cool new feature is support for automatic pagination of collections when using LINQ in queries. This enables you to query multiple pages with a single LINQ expression, and is enabled by default. To disable, set AllowAutomaticPaging to false. An example would be finding data about an alliance, which would usually require you to go through 13 pages, following 'next' links and checking the content. This can now be done with a single statement: var alliance = crest.GetRoot().Query(r => r.Alliances).Query(r => r.Single(a => a.Id == 123)); or var alliances = crest.GetRoot().Query(r => r.Alliances).Query(r => r.Where(a => a.Name.Contains("Brave")));
And it supports all possible LINQ expressions and extensions.
- I've added properties for setting XRequestedWith, Charset and UserAgent to CrestRequestHandler.
- I've added discovery of new resources, which will let you know when CCP implements a previously unsupported resource if you attempt to query it.
- You can now pass ImageHrefs, which are usually logos and portraits, to EveCrest.LoadImage() to get the byte data.
- I've added support for some newly discovered resources, and added a couple of missing ones to the root model.
- The root object can be cached in the evecrest object, and is enabled by default. If you have a seriously long running task which uses the same EveCrest object (weeks?), you might want to disable this.
And lots of other various tweaks and fixes. The README has also had its section on CREST updated. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
14
|
Posted - 2014.12.22 22:32:04 -
[142] - Quote
EveLib 3.0 is now released. Because of the backward incompatibilities, it's been bumped as a new major release.
EveLib is now being distributed as separate libraries on nuget, instead of a single package. This lets me release updates to specific modules without affecting the others. There is a Core module that will be installed automatically as a dependency, so just pick the modules you need and let nuget handle the rest. I'll put links in the original post.
Core Improved EveLibFileCache, with better support for multiple and concurrent instances. Cache paths are now set in a constructor instead of Config. Improved cache purging. Added a CacheLevel enum. This currently supports 4 modes, the default should suffice for most uses.
EveOnlineApi EveOnlineApi has been renamed to EveXml, which better describes the module. This affects the assembly name, the namespace and 4 classes. Added support for CacheLevel to the RequestHandler. Removed EnableCacheLoad and EnableCacheStore properties.
ZKillboard Added support for CacheLevel to the RequestHandler. Removed EnableCacheLoad and EnableCacheStore properties.
EveCrest Added complete support for public and authenticated CREST, with refresh token or access tokens, and several new features related to authenticated CREST. Added support for every currently available resource, I think Added LINQ support for paginated collection resources Added local caching with support for CacheLevel Added MaxConcurrentRequests property for the RequestHandler. The RequestHandler can be shared between EveCrest instances which allows you to throttle properly while using several different instances with different tokens.
Lots of other features that have been described in recent posts.
|

SJ Astralana
Syncore
89
|
Posted - 2015.01.06 01:04:51 -
[143] - Quote
I did a clone today, and can't build due to a missing CrestCollection.cs in EveCrest.
Hyperdrive your production business: Eve Production Manager
|

Tango Papa
The Scope Gallente Federation
0
|
Posted - 2015.01.18 04:43:49 -
[144] - Quote
Can someone post a simple working example of interacting with the Zkillboard module? I'm a C# noob and I'm having a difficult time getting going. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.01.19 03:37:23 -
[145] - Quote
var api = new ZKillboard(); var options = new ZKillboardOptions(); options.Limit = 1; options.WSpace = true; ZkbResponse response = api.GetKills(options); // use the data in the response
You should read the documentation on ZKillboard what options you can use and combine. |

Tango Papa
The Scope Gallente Federation
0
|
Posted - 2015.01.19 18:34:59 -
[146] - Quote
Icahmura Hasaki wrote:var api = new ZKillboard(); var options = new ZKillboardOptions(); options.Limit = 1; options.WSpace = true; ZkbResponse response = api.GetKills(options); // use the data in the response
You should read the documentation on ZKillboard what options you can use and combine.
You make it look so easy.
I'm more confident creating structs and using pointers in C so I'm really out of my league when it comes to anything with classes and methods. I can read the ZKillboard API but what I really needed was a C# code example to get started with. Thanks a ton for your help! |

Tango Papa
The Scope Gallente Federation
0
|
Posted - 2015.01.21 01:52:26 -
[147] - Quote
What really obvious thing am I missing? I'm trying to get information from attackers such as corp, alliance, id, etc. but I can only see DamageDone, FinalBlow, FinalBowString, SecurityStatus, etc.
It's obvious that in the JSON returned by Zkb all is as expected:
Quote: "attackers":[ {"characterID":"384765072", "characterName":"Ssj4gogeta", "corporationID":"98170031", "corporationName":"The Desolate Order", "allianceID":"99003214", "allianceName":"Brave Collective", "factionID":"0", "factionName":"", "securityStatus":"0.0710392792773426", "damageDone":"900", "finalBlow":"1", "weaponTypeID":"31886", "shipTypeID":"12005" } ],
But I'm totally overlooking something here:
Quote:var api = new ZKillboard(); var options = new ZKillboardOptions();
options.Limit = 1; options.WSpace = true; ZkbResponse response = api.GetKills(options); foreach (var data in response) { Console.WriteLine("KillID: " + data.KillId); Console.WriteLine("Number of attackers: " + data.Attackers.Count); foreach (var attackers in data.Attackers) { // Can only get DamageDone, FinalBlow, FinalBowString, SecurityStatus, ShipTypeId, and WeaponTypeId here.
} } |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.01.21 04:25:51 -
[148] - Quote
I don't have access to the project here, but looking at the code at github, it seems I've forgotten to inherit ZkbAttacker from ZkbEntity, so many of the general properties are missing. If you've compiled it yourself you can change
public class ZkbAttacker {
to
public class ZkbAttacker : ZkbEntity {
in Models/ZkbResponse.cs
I'll push a fix for this when I get the opportunity, maybe tomorrow.
|

Tango Papa
The Scope Gallente Federation
0
|
Posted - 2015.01.21 05:28:40 -
[149] - Quote
Icahmura Hasaki wrote:I don't have access to the project here, but looking at the code at github, it seems I've forgotten to inherit ZkbAttacker from ZkbEntity, so many of the general properties are missing. If you've compiled it yourself you can change
public class ZkbAttacker {
to
public class ZkbAttacker : ZkbEntity {
in Models/ZkbResponse.cs
I'll push a fix for this when I get the opportunity, maybe tomorrow.
Awesome, glad I wasn't going crazy. I installed using the package manager so I'll just wait for a new release for now and work on other aspects of my project.
Thanks again!
|

SJ Astralana
Syncore
89
|
Posted - 2015.01.21 18:03:58 -
[150] - Quote
Tango Papa wrote:Icahmura Hasaki wrote:var api = new ZKillboard(); var options = new ZKillboardOptions(); options.Limit = 1; options.WSpace = true; ZkbResponse response = api.GetKills(options); // use the data in the response
You should read the documentation on ZKillboard what options you can use and combine. You make it look so easy.
C# is C++ with training wheels. Funny thing about training wheels, they're like diapers: you need them when you're too young or too old.
Hyperdrive your production business: Eve Production Manager
|
|

Tango Papa
The Scope Gallente Federation
0
|
Posted - 2015.01.22 17:06:34 -
[151] - Quote
I sent a pull request on Github for the change. |

Syrsyrian
Hounds of War. Hashashin Cartel
2
|
Posted - 2015.02.19 16:04:15 -
[152] - Quote
Firstly, thank you so much for this. Made working with the API much less of a pain. Secondly I am trying to search through alliances by name rather than id but the names are null using the following code block;
EveCrest crest = new EveCrest();
var alliance = crest.GetRoot().Query(r => r.Alliances).Query(r => r.Where(a => a.Name == allianceName)).FirstOrDefault();
any ideas? |

Warren DeMartini
United Earth Space Council
1
|
Posted - 2015.03.07 00:31:24 -
[153] - Quote
Sorry for the noob question, but I can't seem to get a market return for a specific system. Using eve-central library, do you have to provide both the region and the system?
I've tried this (VB.NET):
options.Regions.Add(10000002) options.System = ItemID' itemID is the id for the specific system Dim response As EveCentralModule.Models.MarketStatResponse = EveCentral.GetMarketStat(options)
...which does return data for the region, but I can't figure out how to get info on the system. If I provide only the system, I get all 0's on the returns. Am I going about it the wrong way?
What I'm looking for is a code example for getting information for a specific system. I appreciate any help!
If anyone has some code that shows best practices on how to use the market objects in general, that would also be greatly appreciated!
If there's already documentation that's easy to follow, I apologize - all I could find were the sparse examples on Git.
-Warren |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.08 04:07:51 -
[154] - Quote
https://eve-central.com/home/develop.html
There is an example there using system without a region, which I assume is the correct way. If this returns 0 or errors as you say it's a bug. I'll have a look tomorrow. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.10 12:52:49 -
[155] - Quote
I just tested using a system and it seems to be working fine, are you still having issues? |

Dor Cadmon
New Artisian and Mercenary Association
0
|
Posted - 2015.03.15 11:33:29 -
[156] - Quote
I would like to thank you for creating this package.
i'm looking to integrate with the corp api stuff available. I have specific questions regarding starbases.
I have created a corp api object and returned the get star base list and then started iterating through each. I have two problems because i'm a newb.
1. I don't know how to find out the pos name! very frustrating 1b. I can't do lookups using starbase ids of type long because the lookup functions I found require int types.
Dim api As New EveApi api.Authentication = auth
Dim info() As PropertyInfo = api.GetType().GetProperties() Dim charsInfo = api.GetAccountEntries() Dim corpApi = api.GetCorporationStarbaseList Dim StarBaseList = api.GetCorporationStarbaseList
For Each mm As StarbaseListEntry In StarBaseList
Dim stbDetails = api.GetCorporationStarbaseDetail(mm.ItemID)
>>>>>>>>>>> Dim ControlToweName As String = ""
Dim ControlTowerLocation = stbDetails.AdditionalData.Location.Name
Next |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.16 14:27:41 -
[157] - Quote
I'm not sure how this relates to EveLib. The code you have does not use EveLib, maybe you have it confused with another library ? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.16 14:42:48 -
[158] - Quote
Try using the location API to get the name. |

Dor Cadmon
New Artisian and Mercenary Association
0
|
Posted - 2015.03.16 14:46:31 -
[159] - Quote
so sorry for referencing wrong code (I did try a couple diff libs to see if they would teach me.
Dim corp As New Corporation(corKey, corpId)
Dim sbL = corp.GetStarbaseList.Result.Starbases For Each sb As Starbase In sbL Dim sbState As Integer = 0
sbState = sb.State
Next
I know I can get the location for this object but would you please show me how I'd use the ID coming from the starbase asset (or any corp asset for that matter) to retrieve the name? I believe that pos' and jb's are considered containers in this context?
again thanks for taking the time to educate me and great api. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.16 15:04:26 -
[160] - Quote
Use the Locations API, it returns the name.
Dim location = corp.GetLocations(itemID) // you can do multiple IDs at a time Dim itemName = location.itemName |
|

Dor Cadmon
New Artisian and Mercenary Association
0
|
Posted - 2015.03.16 15:11:45 -
[161] - Quote
thank you so much for helping me with my basic questions. Its easy but not necessarily straight forward the first time. Your contributions are greatly appreciated. I hope I may ask other questions after I've tried to find the answer myself.
ty m8. |

Warren DeMartini
United Earth Space Council
1
|
Posted - 2015.03.17 21:48:26 -
[162] - Quote
Not sure what the problem is. I set either the region or the system (but not both) in the first Select Case, and all the BuyOrders and SellOrders values in response.Result.Item(0) are zero. Here's the code if that will help:
Public Function GetPrice(mat As cMaterial) As Double
Dim options As New EveCentralOptions() With {.HourLimit = HourLimit, .MinQuantity = MinQuantity} options.Items.Add(mat.TypeID) 'add the material's type id Dim EveCentral = New EveCentral()
Select Case ItemType 'this is an enum value; value is property of this class
Case eSystemType.REGION options.Regions.Add(ItemID) Case eSystemType.SOLARSYSTEM options.System = ItemID
End Select
Dim response As EveCentralModule.Models.MarketStatResponse = EveCentral.GetMarketStat(options)
Select Case TypeTransaction ' this is an enum value; value is property of this class
Case eTransaction.BUY
Select Case TypePrice ' this is an enum value; value is property of this class
Case ePrice.AVG Return response.Result.Item(0).BuyOrders.Average Case ePrice.MAX Return response.Result.Item(0).BuyOrders.Max Case ePrice.MIN Return response.Result.Item(0).BuyOrders.Min
End Select
Case eTransaction.SELL
Select Case TypePrice
Case ePrice.AVG Return response.Result.Item(0).SellOrders.Average Case ePrice.MAX Return response.Result.Item(0).SellOrders.Max Case ePrice.MIN Return response.Result.Item(0).SellOrders.Min
End Select
End Select End Function
Thanks,
--Warren |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.03.18 00:42:51 -
[163] - Quote
Try it without the HourLimit and MinQuantity. I am pretty sure the marketstat call should be working, unless something has changed recently or there is an issue specific to VB. |

Warren DeMartini
United Earth Space Council
1
|
Posted - 2015.03.23 01:34:58 -
[164] - Quote
Icahmura Hasaki wrote:Try it without the HourLimit and MinQuantity. I am pretty sure the marketstat call should be working, unless something has changed recently or there is an issue specific to VB.
Yep - that did it. I was passing in 1 hour, 1 Quant. Limit by default. Thanks man!
|

Chizeru Nakamoto
Science and Trade Institute Caldari State
0
|
Posted - 2015.03.25 22:55:46 -
[165] - Quote
Hi, I had a couple of questions if you have the time. Never worked in C# before, so some of the questions might be, uh...stupid.
1) I'm getting exceptions when trying to retrieve market orders for a region. It seems to be related to how the MarketOrder class extends LinkedEntity{NotImplemented}. Is current market order support not yet implemented or am I just missing something?
2) Nevermind, figured it out. |

Space Frenemy
State War Academy Caldari State
1
|
Posted - 2015.04.02 02:18:37 -
[166] - Quote
Chizeru Nakamoto wrote:Hi, I had a couple of questions if you have the time. Never worked in C# before, so some of the questions might be, uh...stupid.
1) I'm getting exceptions when trying to retrieve market orders for a region. It seems to be related to how the MarketOrder class extends LinkedEntity{NotImplemented}. Is current market order support not yet implemented or am I just missing something?
2) Nevermind, figured it out. I had the same problem, couldn't figure out what was up. I'm not even sure due to lack of documentation on the CREST side of things whether the market orders are even active on crest-tq? Anyway, I tried repackaging the code myself and applying the appropriate MarketOrderCollection to the output (where it is currently LinkedEntity{NotImplemented}), but that didn't really help me either.
Any ideas, Icahmura? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.04.02 13:29:56 -
[167] - Quote
Getting market orders for a region isn't working right now, as I haven't implemented a way to pass the required itemID href as a parameter. I've discussed some possible solutions with some others, and we're working on it. I haven't been spending much time on this lately, but I'll see if I can push some updates during eastern. Anyone is welcome to make improvements and request a pull :) |

Rankenn Estemaire
The Scope Gallente Federation
0
|
Posted - 2015.04.04 16:20:01 -
[168] - Quote
Icahmura Hasaki wrote:Getting market orders for a region isn't working right now, as I haven't implemented a way to pass the required itemID href as a parameter. I've discussed some possible solutions with some others, and we're working on it. I haven't been spending much time on this lately, but I'll see if I can push some updates during eastern. Anyone is welcome to make improvements and request a pull :)
Could that explain why I'm getting weird Station IDs that are way to high? The highest available station id is 60015151 but I'm getting id back that are in the 61000000 range
|

Clyde en Marland
Raised By Wolves Inc
4
|
Posted - 2015.04.10 13:36:35 -
[169] - Quote
var api = new ZKillboard(); var options = new ZKillboardOptions(); options.Limit = 1; options.WSpace = true; try { ZkbResponse response = api.GetKills(options); } catch (Exception ex) { }
This always throws a Newtonsoft.Json.JsonSerializationException "Error converting value \"1\" to type 'System.Boolean'. Path '[0].attackers[0].finalBlow', line 1, position 642." I've dug into it, & it seems that the deserializer should be setting the property "FinalBlowString" of the "ZkbAttacker" object (which then sets the bool "FinalBlow", but something isn't mapping "finalBlow" in the Json to the DataMember "finalBlow" (which is attached to the property "FinalBlowString"). Does anyone else see this, or have any pointers? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
15
|
Posted - 2015.04.12 15:34:14 -
[170] - Quote
Renkenn Estemaire: I have no idea whats causing invalid Station IDs.
Clyde en Marland: Should be an easy fix, I'll look at it tomorrow. |
|

Kainar Detremov
Best Kept Frozen. Meet The Bandits.
0
|
Posted - 2015.06.04 03:42:44 -
[171] - Quote
I'm having a similar issue to Clyde en Marland,
It occurs when calling api.GetKills - this is the stack trace. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.04 15:47:33 -
[172] - Quote
I pushed a fix to github that hopefully resolves any issues with ZKillboard.
Does any of you have the possibility to test the changes before I push it to Nuget ? |

Kainar Detremov
Best Kept Frozen. Meet The Bandits.
0
|
Posted - 2015.06.05 07:48:16 -
[173] - Quote
Everything appears to be working wonderfully now. Thanks for your time and ongoing support and work on this library - it's fantastic! |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.06 14:42:53 -
[174] - Quote
Thanks for the appreciation! I've pushed this fix to nuget now, along with a fix for the AccountStatus/MultiCharacterTraining issue with EveXML. |

Clyde en Marland
Raised By Wolves Inc Nerfed Alliance Go Away
5
|
Posted - 2015.06.09 07:34:45 -
[175] - Quote
I'm not sure whether you caught this one in your fix, so I'll note it anyway. zKillboard seem to have removed the "X-Bin-Request-Count" & "X-Bin-Max-Requests" headers which results in a problem in ZkbRequestHandler.RequestAsync (lines 76 & 77 by my IDE).
This is awesome work though  |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.09 09:14:34 -
[176] - Quote
I noticed it seemed to be missing in some tests, and thought I fixed that in the latest version. If it's really gone I'll just remove the parts relating to it all together, but it should still be working in the newest version. Thanks for the heads up though :) |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.11 21:28:25 -
[177] - Quote
I have been learning C# and this is really fun to use. I am curious if there is a way to take the ItemId that is returned from the GetAssetList method and map that to an actual item name. Would I need a database internal to the project?
Thanks for the great library |

Clyde en Marland
Raised By Wolves Inc Nerfed Alliance Go Away
5
|
Posted - 2015.06.12 10:50:52 -
[178] - Quote
Add a function like this to query the item:
private eZet.EveLib.StaticDataModule.Models.InvType GetItem(int id) { var asstObjAccess = new eZet.EveLib.StaticDataModule.EveStaticData(); var assetObj = asstObjAccess.GetInvType(id);
return assetObj; }
Then do this to call it & have access to the info:
var assList = char1.GetAssetList().Result.Items; var assetInfo = GetItem(assList.TypeId); var assetName = assetInfo.Name; |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 12:34:13 -
[179] - Quote
Excellent answer Clyde :)
KillaGouge: The StaticDataModule uses element-43.com to retrieve data, each call to var assetObj = asstObjAccess.GetInvType(id); will do a http request, so it might not be suitable for a very large number of items.
I stopped development of that module some time ago in anticipation of CREST, but CREST and the way its been designed/implemented has really put me off, so maybe I'll finish this, or at least a few more endpoints.
|

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 13:10:29 -
[180] - Quote
Thank you both Clyde and Icahmura. I will look into the StaticDataModule. Last night while trying to brute force a solution I grabbed the invTypes.xls from fuzzwork and created a stupidly long dictionary and just passed the type ID into a TryGetValue. The performance wasn't nearly as bad as I thought it would be, but going forward I know that is a horrible way of doing things.
Icahmura, if you don't mind me asking what about CREST has put you off? For me, the way that auth CREST works, makes it very hard to develop using it, as I don't yet have a URL to redirect back to as I am just running the project in visual studio on my machine. I don't want to pay for Azure time while I am still learning and developing.
Thanks for all the help. |
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 13:23:54 -
[181] - Quote
Its just very cumbersome to use in most relevant scenarios, it seems to be designed around some theoretic ideal instead of realistic use cases. The Auth mechanism was always intended for HTTP/browsers, as its using OAuth, which is fine. Theres a module for it in EveLib, EveAuth. You need to log in using your browser once to retrieve the authorization code, but the library will handle the rest from there, no redirects needed, just copy it from your browser and provide it to the Auth object.
edit: Speaking of crest, why is the refresh token blank/null now, I'm certain it wasn't before... Did I miss something ? |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 13:25:56 -
[182] - Quote
I thought that in order to use it, you have to register an application with CCP and provide a URL call back address? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 13:35:32 -
[183] - Quote
Register you application here https://developers.eveonline.com/
Set the callback to / Go to https://login.eveonline.com/oauth/authorize/?response_type=code&redirect_uri=/&client_id=YOUR-APP-ID-HERE&scope=&state=devstate
and login. The URL in your browser will change, providing you with an auth code. Use that to obtain a refresh token, either through EveAuth or some HTTP client. Store the refresh token somewhere, it can be used indefinitely, and give that to EveAuth when you create a new object :) |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 14:09:26 -
[184] - Quote
Im writing up a quick utility now to make it easier to get refresh tokens, give me a few minutes. Then you shouldn't have to use EveAuth, just run the tool, get your refreshtoken and provide that to EveCrest in EveLib. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 15:00:11 -
[185] - Quote
Here's a small CLI to assist in obtaining the access- and refresh tokens. It's very rudimentary, but it should do the job. Just follow the instructions, and ask here if there's any issues.
https://github.com/ezet/evelib/releases/download/v1.0-EveAuthUtil/EveAuthUtility.rar
The source is on github as part of evelib, and it uses EveAuth for the actual authentication process :) |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 15:09:53 -
[186] - Quote
I may be an idiot, but when I paste in the full url it tells me it is unable to locate the authentication code. Can I paste in the url, or does it need to be entered manually?
Edit: It looks like for some reason the URL in the browser after I login doesn't contain the &state text |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 15:19:49 -
[187] - Quote
You are completely right, for now just add &state=whatever at the end of the url before pasting it. I'll fix it later :p |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 15:22:32 -
[188] - Quote
when calling
EveCrest crest = new EveCrest("I know the refresh token goes here", encodedKey);
What is the encodedKey?
Thanks again for all your help. It is nice to know I can ask the basic questions. |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 15:26:00 -
[189] - Quote
It's the base64 encoded clientId + secretKey. Give me 5 minutes and I'll sort these things and upload a new version :) |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 15:36:28 -
[190] - Quote
https://github.com/ezet/evelib/releases/download/v1.1-EveAuthUtil/EveAuthUtility-v1.1.rar
Let me know how that works :) |
|

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 15:43:16 -
[191] - Quote
Awesome man, that works great. I create a new EveCrest object and pass that in. I am able to get an alliance name back |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.12 16:04:47 -
[192] - Quote
Does it work? I honestly don't remember, its been like 8 months since I had a look at the CREST part. The CREST documentation pretty sparse, and the documentation I have is in the readme on github. At this point its still very much a work in progress, sorry. I'll see if have time to look at it again in the next few days, but I'll be leaving shortly so I don't have time to look at it right now  |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.12 16:18:48 -
[193] - Quote
Right now it just sort of hangs. I'll dig and see what I can find. The alliance query you give as an example works. So the crest auth is working.
Thanks for everything |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.22 18:33:02 -
[194] - Quote
I have a new stupid question.
I am trying to get the fitting of the last ship the character was in. This is what I have so far
Character character = ckey.Characters.Single(c => c.CharacterName == "KillaGouge"); var inventory = character.GetAssetList(); var lastShip = character.GetCharacterInfo().Result.ShipTypeId;
I am not sure what I'd need to do to inventory to get all the instances of items with the same TypeId as lastShip
I thought it would be inventory.Result.Items.Where(item => item.ItemId == lastShip);
but that doesn't return an object I can foeach through.
Anybody have an idea on how I can be less wrong? |

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.22 19:20:32 -
[195] - Quote
KillaGouge wrote:I have a new stupid question. I am trying to get the fitting of the last ship the character was in. This is what I have so far
Character character = ckey.Characters.Single(c => c.CharacterName == "KillaGouge"); var inventory = character.GetAssetList(); var lastShip = character.GetCharacterInfo().Result.ShipTypeId;
I am not sure what I'd need to do to inventory to get all the instances of items with the same TypeId as lastShip I thought it would be inventory.Result.Items.Where(item => item.ItemId == lastShip); but that doesn't return an object I can foeach through. Anybody have an idea on how I can be less wrong?
The list is returned as a hierarchy of containers, ships, positions and such, so you would have to flatten the list or traverse the hierarchies. If you flatten it completely, you will lose information about what the ship contains. I think I wrote a function called Flatten for that, available on the Result object, or the Items list, cant remember exactly.
edit: check http://wiki.eve-id.net/APIv2_Char_AssetList_XML
You probably want to traverse the tree yourself, and if Im not mistaken you only have to go 2 levels deep, since ships cannot be contained in anything else. So you need to check every location, and then every item in that location. |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.22 19:28:28 -
[196] - Quote
var lastShip = character.GetCharacterInfo().Result.ShipTypeId; var lastShipContainer = inventory.Where(item => item.TypeId == lastShip); foreach (var item in lastShipContainer) { foreach (var subItem in item.Items) { resutlLabel.Text += GetItem(subItem.TypeId).Name; } }
This works. I just need to do some testing for cases where |

Clyde en Marland
Raised By Wolves Inc Nerfed Alliance Go Away
6
|
Posted - 2015.06.23 08:47:18 -
[197] - Quote
I think you missed a bit from your post.
Also (seeing as I'm supposed to be pushing Linq for some reason at work), this line
inventory.Where(item => item.TypeId == character.GetCharacterInfo().Result.ShipTypeId).ToList().ForEach(subItem => resutlLabel.Text = string.Concat(resutlLabel.Text, GetItem(subItem.TypeId).Name));
could replace
var lastShip = character.GetCharacterInfo().Result.ShipTypeId; var lastShipContainer = inventory.Where(item => item.TypeId == lastShip); foreach (var item in lastShipContainer) { foreach (var subItem in item.Items) { resutlLabel.Text += GetItem(subItem.TypeId).Name; } }
The string.Concat method is more resource-usage friendly than += for putting multiple strings together, as += creates a new string in memory. |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.23 14:14:41 -
[198] - Quote
inventory.Where(item => item.TypeId == character.GetCharacterInfo().Result.ShipTypeId).ToList().ForEach(subItem => resutlLabel.Text = string.Concat(resutlLabel.Text, GetItem(subItem.TypeId).Name));
Produces this output
Golem
var lastShip = character.GetCharacterInfo().Result.ShipTypeId; var lastShipContainer = inventory.Where(item => item.TypeId == lastShip); foreach (var item in lastShipContainer) { foreach (var subItem in item.Items) { var itemInfo = GetItem(subItem.TypeId); resutlLabel.Text += itemInfo.Name; } }
Produces this output, which is what I am looking for
Mobile Tractor Unit Cruise Missile Launcher II Bastion Module I Salvager I Caldari Navy Large Shield Booster Pithum C-Type Adaptive Invulnerability Field Adaptive Invulnerability Field II Republic Fleet Target Painter Large Micro Jump Drive Caldari Navy Ballistic Control System Large Warhead Flare Catalyst II Caldari Navy Ballistic Control System Large Warhead Flare Catalyst II Salvager I Republic Fleet Target Painter Republic Fleet Target Painter Caldari Navy Ballistic Control System Caldari Navy Ballistic Control System Salvager I Hornet II Hornet II Hornet II Hornet II Cruise Missile Launcher II Cruise Missile Launcher II Cruise Missile Launcher II
|

Icahmura Hasaki
Bearded BattleBears Brave Collective
16
|
Posted - 2015.06.23 14:41:07 -
[199] - Quote
Anyone have any good ideas for a way to pass parameters when querying crest resources? Such as the market orders, or items in a specific group. They want us to pass along the full crest uri of eg. a ItemType as the parameter, and I can't really think of any good way to do this...
Example: https://api-sisi.testeveonline.com/market/10000002/orders/buy/?type=https://api-sisi.testeveonline.com/types/587/
At the moment I there doesn't seem to be a way to navigate to this from the root? So I'll basically have to construct the URL client side, inserting the region ID and all, which seems to be completely the opposite for how they wanted crest to be used.. ? |

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.23 14:50:25 -
[200] - Quote
couldn't you have a method that takes that information as parameters? So it would be GetMarketData(int regionId) and have overloaded constructors to get to the specifics a call would need?
Disclaimer, I am still new to programming |
|

SJ Astralana
Syncore
104
|
Posted - 2015.06.23 20:30:51 -
[201] - Quote
Icahmura Hasaki wrote:Anyone have any good ideas for a way to pass parameters when querying crest resources? Such as the market orders, or items in a specific group. They want us to pass along the full crest uri of eg. a ItemType as the parameter, and I can't really think of any good way to do this... Example: https://api-sisi.testeveonline.com/market/10000002/orders/buy/?type=https://api-sisi.testeveonline.com/types/587/
At the moment I there doesn't seem to be a way to navigate to this from the root? So I'll basically have to construct the URL client side, inserting the region ID and all, which seems to be completely the opposite for how they wanted crest to be used.. ?
Several of us have ranted on inconsistencies like this -- I had to do the same thing unfortunately. I've surfed the code in this library by the way, the CLI utility is inspired, and overall the library is a damn fine piece of work.
Hyperdrive your production business: Eve Production Manager
|

KillaGouge
DelTacos 212
0
|
Posted - 2015.06.26 01:06:56 -
[202] - Quote
Icahmura, I tried adding the NuGet package to a Universal App project in Visual Studio, but apparently it cannnot because of a .Net version targeting error. Do you know how I would get around this?
Thanks |

Clyde en Marland
Raised By Wolves Inc Nerfed Alliance Go Away
6
|
Posted - 2015.06.26 13:52:14 -
[203] - Quote
KillaGouge wrote:Icahmura, I tried adding the NuGet package to a Universal App project in Visual Studio, but apparently it cannnot because of a .Net version targeting error. Do you know how I would get around this?
Thanks
Change the target .NET Framework of your VS Project to 4.5  |

Brain Gehirn
Reikoku Pandemic Legion
71
|
Posted - 2015.07.11 15:41:38 -
[204] - Quote
Hey,
Talking about market orders, the ID is using int32 but its an int64.
Other than that, what would be the best way to grab the public corporation sheet from the API? I have updated the code from GIT and had to rollback some changes to be able to keep querying for that (since the crest corporation endpoint isnt working yet).
Awesome work on this API dude! It's a really good job. I just had to edit a few things to make it usable / easier to use for me and I will leave it as a suggestion: - Grab all URL information (crest, sso, xml and so on) from the web.config using some specific tag - its easier to test/deploy if you do that - At the config class (evelib.core) you are using a fixed appdata value. I had to change that to: Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + Separator; (I'm using with a website) so maybe you could do some kind of configuration here to set one or another
Other than that I must have made just a few minor implementations. I'm still getting used to GIT so I might attempt to upload these at some point.
Thanks a lot.
What is a signature?
|

Icahmura Hasaki
Bearded BattleBears Against ALL Authorities
16
|
Posted - 2015.07.12 16:31:39 -
[205] - Quote
Thanks for the feedback. I'm actually aware of all of those, just haven't gotten around to fixing it yet. Feel free to send pull requests if you come up with any good solutions.
Can't you just pull the corporation sheet using the regular XML api ? I'm not sure why you would have to roll back any changes for that to work.
I'll have the int32/64 issue fixed, the others might take some time. Glad you like it :) |

Verite Rendition
F.R.E.E. Explorer
144
|
Posted - 2015.07.15 05:02:33 -
[206] - Quote
Icahmura, does the CREST module work with the new sovereignty structures endpoint, or will a new version be required for that? |

Kuja Armitage
Rogue Drones Dancing Tango
0
|
Posted - 2015.08.08 23:24:36 -
[207] - Quote
This may be a noobish question, but how can I achieve getting results as from query:
https://public-crest.eveonline.com/market/types/?group=https://public-crest.eveonline.com/market/groups/150/
using this library?
My current code wich I think should work doesn't even compile:
var crest = new EveCrest(); var root = crest.GetRoot(); var types = root.Query(r => r.MarketTypes); var skillbooks = types.Query(type => type.Where(t => t.MarketGroup.Id == 150));
Basicly what I'm trying to achieve is to get list of all available skillbooks. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.08.09 16:28:49 -
[208] - Quote
Verite Rendition wrote:Icahmura, does the CREST module work with the new sovereignty structures endpoint, or will a new version be required for that?
Wasn't aware of the new endpoint, but I'll have to add that to the next version. Holiday ends next week so I'll get it up then. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.08.09 16:40:05 -
[209] - Quote
Kuja Armitage wrote:This may be a noobish question, but how can I achieve getting results as from query: https://public-crest.eveonline.com/market/types/?group=https://public-crest.eveonline.com/market/groups/150/
using this library? My current code wich I think should work doesn't even compile: var crest = new EveCrest(); var root = crest.GetRoot(); var types = root.Query(r => r.MarketTypes); var skillbooks = types.Query(type => type.Where(t => t.Id == 150));
Basicly what I'm trying to achieve is to get list of all available skillbooks.
Yeah, there are some issues with the Query API. I sort of gave up on it because I really didn't like CREST much.
I don't know how to query for that of the top of my head, I'll get back to you when I have the lib available to test it. |

Syrsyrian
Hounds of War. Hashashin Cartel
2
|
Posted - 2015.08.11 19:24:11 -
[210] - Quote
Someone in this thread may be able to help me here. I appear to be having a permissions issue of sorts when I have a .net MVC project using this library deployed.
To give an example the following lines work perfectly fine until it is deployed which then gives me the error that follows.
Character character = new Character(key.keyId, key.vCode, characterId);
var assets = character.GetAssetList().Result.Items;
Once deployed I get: Access to the path '\EveLib\EveXmlCache' is denied.
After doing some searching around I gather I do not have permission to access what I assume is the cached xml from the API calls? Or am I missing something incredibly obvious? |
|

Desmont McCallock
558
|
Posted - 2015.08.11 19:29:20 -
[211] - Quote
Your app doesn't have access to the folder where EVELib is caching. Give your app access to the folder or run your app on an administrator account. |

Syrsyrian
Hounds of War. Hashashin Cartel
2
|
Posted - 2015.08.11 19:51:25 -
[212] - Quote
Run app as administrator? There is no such folder for me to provide permissions for unfortunately. |

Desmont McCallock
558
|
Posted - 2015.08.12 06:49:45 -
[213] - Quote
Looking at the code the EveXmlCache is set to be in users' AppData folder and I have seen many occasions where apps have problems when write access to that folder is denied. But hopefully for you you can set the folder where EveLib should cache in the config file ('appSettings/eveLib.AppData'). |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.08.12 08:50:05 -
[214] - Quote
Yeah, the cache folder is in the users Appdata folder on windows machines. This will be a lot easier to change in the next version, but I haven't gotten around to fix it yet. I'm still out for a few days so I won't be able to fix that quite yet unfortunately. You can try changing the cache path like this
Core.Config.CacheFactory = () => new EveLibFileCache(yourPath + "EveXmlCache", "register");
|

Desmont McCallock
558
|
Posted - 2015.08.12 09:51:42 -
[215] - Quote
Icahmura Hasaki wrote:Yeah, the cache folder is in the users Appdata folder on windows machines. This will be a lot easier to change in the next version, but I haven't gotten around to fix it yet. I'm still out for a few days so I won't be able to fix that quite yet unfortunately. You can try changing the cache path before creating the character object
Core.Config.CacheFactory = () => new EveLibFileCache(yourPath + "EveXmlCache", "register");
Or to change the cache on an existing object, set the cache directly
character.RequestHandler.Cache = new EveLibFileCache(yourPath + "EveXmlCache", "register"); Ahh, yes. Taking a closer look AppData path is hardcoded in and in the config you can only set the folder name under AppData. Being able to set the cache path of your choice via config would be a huge plus to your library. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.08.12 11:53:40 -
[216] - Quote
Yes it would! But for now either of the two solutions above should work, let me know if they don't :) I'll be fixing this as well as adding the new sovereignty endpoints on CREST for next release.
edit: nvm, you're not the one having the issue are you :).. Syrsyrian, please let me know if that works for you. |

Desmont McCallock
558
|
Posted - 2015.08.12 12:38:16 -
[217] - Quote
Icahmura Hasaki wrote:Yes it would! But for now either of the two solutions above should work, let me know if they don't :) I'll be fixing this as well as adding the new sovereignty endpoints on CREST for next release.
edit: nvm, you're not the one having the issue are you :).. Syrsyrian, please let me know if that works for you. Yeah, I'm just "The EVEMon guy" pitching in to lend a helping hand.
|

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.08.12 12:48:07 -
[218] - Quote
Oh, I didn't realize that was you! Any help, input and suggestions is greatly appreciated. :) |

Brain Gehirn
Reikoku Pandemic Legion
71
|
Posted - 2015.08.12 17:04:10 -
[219] - Quote
About the MVC question:
I have changed the AppData (under evelib.Core.Config.cs) to: - AppDomain.CurrentDomain.BaseDirectory + Separator
Also you will need to give write permissions to your application, no need to run it as any specific user. Remember to just give permission to this directory and also make your robots.txt to avoid this same folder :justincase:
What is a signature?
|

Syrsyrian
Hounds of War. Hashashin Cartel
2
|
Posted - 2015.08.13 02:13:52 -
[220] - Quote
Thanks for the replies, I'll have a go at the suggestions tomorrow. |
|

Syrsyrian
Hounds of War. Hashashin Cartel
2
|
Posted - 2015.08.13 20:29:08 -
[221] - Quote
Thanks for the help, its now working as expected. As per Brains instructions I changed the line for the path variable in the core library config. |

Reon corm
Ling Ling Industries
0
|
Posted - 2015.08.18 18:50:08 -
[222] - Quote
Kuja Armitage wrote:This may be a noobish question, but how can I achieve getting results as from query: https://public-crest.eveonline.com/market/types/?group=https://public-crest.eveonline.com/market/groups/150/
using this library? My current code wich I think should work doesn't even compile: var crest = new EveCrest(); var root = crest.GetRoot(); var types = root.Query(r => r.MarketTypes); var skillbooks = types.Query(type => type.Where(t => t.MarketGroup.Id == 150));
Basicly what I'm trying to achieve is to get list of all available skillbooks.
This way:
EveCrest crest = new EveCrest(); var orders = new Href("https://crest-tq.eveonline.com/market/10000002/orders/buy/?type=https://crest-tq.eveonline.com/types/587/"); var orderCollection = crest.Load(orders);
But.... this will give you an exception. MarketOrder.Id is of type int, should be long. I created an pull request to fix this. |

Quesa
Burning Napalm Northern Coalition.
81
|
Posted - 2015.09.03 01:20:49 -
[223] - Quote
Having an issue getting the public CorporationSheet data (no ApiKey required). Currently, the only way I see to get access to the corporation data is to create a new corporation:
var corp = new Corporation(new CorporationKey(0, ""), 1000009);
I don't have a key for the corporation and don't need it because I only need the public data.
Anyone have a workaround that doesn't involve me creating my own code to bring down and deserialize the XML? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.05 10:56:34 -
[224] - Quote
Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon. |

Quesa
Burning Napalm Northern Coalition.
81
|
Posted - 2015.09.05 22:23:29 -
[225] - Quote
Icahmura Hasaki wrote:Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon.
Sweet, thanks.
If you're really into punishing yourself, there are a good deal of these types of endpoints that have optional credential requirements for public data...possible that you missed more? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.06 16:25:18 -
[226] - Quote
Quesa wrote:Icahmura Hasaki wrote:Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon. Sweet, thanks. If you're really into punishing yourself, there are a good deal of these types of endpoints that have optional credential requirements for public data...possible that you missed more?
Do you have any examples? I can't recall seeing any
|

Richard TheLordOfDance
New Eden Special Operations Force
15
|
Posted - 2015.09.06 18:47:58 -
[227] - Quote
Any reason why the EveCentral module don't have the option to use POST to send the data instead of always using GET? Would be nice for looking up market stats for large amounts of items at once |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.06 21:03:40 -
[228] - Quote
Richard TheLordOfDance wrote:Any reason why the EveCentral module don't have the option to use POST to send the data instead of always using GET? Would be nice for looking up market stats for large amounts of items at once What prevents you from doing that using GET ?
|

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.06 21:05:01 -
[229] - Quote
Quesa wrote:Having an issue getting the public CorporationSheet data (no ApiKey required). Currently, the only way I see to get access to the corporation data is to create a new corporation: var corp = new Corporation(new CorporationKey(0, ""), 1000009); I don't have a key for the corporation and don't need it because I only need the public data. Anyone have a workaround that doesn't involve me creating my own code to bring down and deserialize the XML?
The current version on git now supports this, available as EveLib.Eve.GetCorporationSheet(id)
|

Richard TheLordOfDance
New Eden Special Operations Force
15
|
Posted - 2015.09.06 21:41:09 -
[230] - Quote
Icahmura Hasaki wrote:Richard TheLordOfDance wrote:Any reason why the EveCentral module don't have the option to use POST to send the data instead of always using GET? Would be nice for looking up market stats for large amounts of items at once What prevents you from doing that using GET ? edit: I guess there's a size limit, I'll add a post option. Awesome ^^ sorry for not being clear about the size limit, have bumped into the same problem when writing some web request stuff of my own so thought it was a well known thing... |
|

Valko Raskolbasko
Russian sword Corporation RA Citizens
0
|
Posted - 2015.09.07 14:48:25 -
[231] - Quote
I am newbie and i have some problem.
var eveMarketData = new EveMarketData ( ) ;
var emdOptions = new EmdOptions { Items = new List < int > { 1223 } , ItemGroups = new List < int > ( ) , Regions = new List < int > ( ) , Stations = new List < int > ( ) , Solarsystems = new List < int > { 30000142 }, RowLimit = 10000 , AgeSpan = TimeSpan.FromDays ( 30 ) , };
var orders = eveMarketData.GetItemOrders(emdOptions, OrderType.Both).Result.Orders.ToList();
I received orders, but the result often differs from eve_central
As example, now i received only sell orders. Buy orders are empty.
I've tried to change params of EmdOptions (RowLimit and AgeSpan ) but result is the same.
I've tried to use this:
var eveCentral = new EveCentral ( ) ; MarketStatResponse response = eveCentral.GetMarketStat ( options ) ;
But, here i don't receive orders, only info ( Max/Min/Avg and other). This info - is correct.
What i am doing wrong? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.07 15:15:33 -
[232] - Quote
As far as I'm aware Eve Central and Eve Market Data do not use the same data sources, so they will rarely if ever match. I've used the EMD module myself extensively a few months back, and I'm fairly confident it's working as it should. I'm not sure the website is being maintained anymore tho, I heard some rumors it was dying?
If you debug your calls, the generated URI should be output to your console. Verify that the URI has the correct/expected GET parameters, and compare the returned XML in your browser to the returned object to see that everything is parsed correctly. |

Valko Raskolbasko
Russian sword Corporation RA Citizens
0
|
Posted - 2015.09.07 15:46:38 -
[233] - Quote
Icahmura Hasaki wrote:As far as I'm aware Eve Central and Eve Market Data do not use the same data sources, so they will rarely if ever match. I've used the EMD module myself extensively a few months back, and I'm fairly confident it's working as it should. I'm not sure the website is being maintained anymore tho, I heard some rumors it was dying?
If you debug your calls, the generated URI should be output to your console. Verify that the URI has the correct/expected GET parameters, and compare the returned XML in your browser to the returned object to see that everything is parsed correctly.
Thx for your answer. Yes, parameters are correct and parsed all fine.
For any ideas, how to get correct buy/sell orders - i will be very grateful! |

Brain Gehirn
Reikoku Pandemic Legion
72
|
Posted - 2015.09.07 18:07:01 -
[234] - Quote
Valko Raskolbasko wrote:
Thx for your answer. Yes, parameters are correct and parsed all fine.
For any ideas, how to get correct buy/sell orders - i will be very grateful!
Grab from CREST and be happy.
What is a signature?
|

Quesa
Burning Napalm Northern Coalition.
81
|
Posted - 2015.09.08 00:03:39 -
[235] - Quote
Icahmura Hasaki wrote:Quesa wrote:Icahmura Hasaki wrote:Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon. Sweet, thanks. If you're really into punishing yourself, there are a good deal of these types of endpoints that have optional credential requirements for public data...possible that you missed more? Do you have any examples? I can't recall seeing any
By good deal, I meant 2 . They appear to be the corp one and CharacterSheet. |

Valko Raskolbasko
Russian sword Corporation RA Citizens
0
|
Posted - 2015.09.08 12:11:48 -
[236] - Quote
Brain Gehirn wrote:Grab from CREST and be happy.
I am sorry, bot how can i get buy/sell orders by CREST? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.08 20:02:40 -
[237] - Quote
Quesa wrote:Icahmura Hasaki wrote:Quesa wrote:Icahmura Hasaki wrote:Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon. Sweet, thanks. If you're really into punishing yourself, there are a good deal of these types of endpoints that have optional credential requirements for public data...possible that you missed more? Do you have any examples? I can't recall seeing any By good deal, I meant 2  . They appear to be the corp one and CharacterSheet.
I can't seem to find any documentation for a public CharacterSheet, got a link? |

Desmont McCallock
562
|
Posted - 2015.09.08 20:59:31 -
[238] - Quote
http://wiki.eve-id.net/APIv2_Corp_CorporationSheet_XML
For Character you need to use CharacterInfo. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.08 21:01:15 -
[239] - Quote
Desmont McCallock wrote:http://wiki.eve-id.net/APIv2_Corp_CorporationSheet_XML
Are you sure there's anything about the CharacterSheet there? If so I can't find it.. The public CorporationSheet is already added :)
edit: I guess the correct name is CharacterInfo, which I think already supports both a public and the keyed version. |

Desmont McCallock
562
|
Posted - 2015.09.08 21:03:37 -
[240] - Quote
Icahmura Hasaki wrote:Desmont McCallock wrote:http://wiki.eve-id.net/APIv2_Corp_CorporationSheet_XML Are you sure there's anything about the CharacterSheet there? If so I can't find it.. The public CorporationSheet is already added :) edit: I guess the correct name is CharacterInfo, which I think already supports both a public and the keyed version. I wasn't done editing bro. |
|

Brain Gehirn
Reikoku Pandemic Legion
72
|
Posted - 2015.09.09 16:56:31 -
[241] - Quote
Valko Raskolbasko wrote:Brain Gehirn wrote:Grab from CREST and be happy. I am sorry, bot how can i get buy/sell orders by CREST?
Check your ingame mail. As it could have been a bit off I have sent it there.
What is a signature?
|

Quesa
Burning Napalm Northern Coalition.
81
|
Posted - 2015.09.09 22:14:13 -
[242] - Quote
Icahmura Hasaki wrote:Quesa wrote:Icahmura Hasaki wrote:Quesa wrote:Icahmura Hasaki wrote:Seems to be an oversight on my part, and there isn't a way for doing this at the moment. I'll add this to the next version, which is coming soon. Sweet, thanks. If you're really into punishing yourself, there are a good deal of these types of endpoints that have optional credential requirements for public data...possible that you missed more? Do you have any examples? I can't recall seeing any By good deal, I meant 2  . They appear to be the corp one and CharacterSheet. I can't seem to find any documentation for a public CharacterSheet, got a link? CharacterInfo, sorry. I gotta stop posting late. |

Quesa
Burning Napalm Northern Coalition.
82
|
Posted - 2015.09.11 21:02:07 -
[243] - Quote
I cannot seem to get any of the Corporations (memberCorporations row) from the AllianceList (GetAllianceList()) endpoint, they all end up returning null. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.11 21:09:05 -
[244] - Quote
Quesa wrote:I cannot seem to get any of the Corporations (memberCorporations row) from the AllianceList (GetAllianceList()) endpoint, they all end up returning null.
I'll look at it tomorrow :) |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.12 16:50:33 -
[245] - Quote
Been trying to figure out why memberCorporations won't parse for hours now, and I am no closer to finding a solution. If anyone has any ideas, please let me know. Similar looking XML outputs parse perfectly fine, and I've checked the code n times, and I just can't find any reason for it to behave as it does. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
16
|
Posted - 2015.09.12 17:16:28 -
[246] - Quote
Turns out the API is serving me with xml eveapi version 1, which doesn't include the memberCorporations. Anyone know why it's giving me this version, instead of eveapi version 2 ? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
17
|
Posted - 2015.09.12 17:26:25 -
[247] - Quote
Okay, feeling pretty stupid now. Turns out I gave GetAllianceList() a optional parameter, extended, which defaults to false. If you pass in true, you'll have the corporations included. Been too long since I worked on this...
Make sure to disable or delete your cache if you've pulled version 1 recently and want the extended version. |

Dextrome Thorphan
Intrepid Crossing
131
|
Posted - 2015.09.21 09:26:32 -
[248] - Quote
I keep getting {"error":"invalid_request", "error_description":"The callback URI doesn't match the value stored for this client"} When I try that URL with my application ID - any idea what I'm doing wrong? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
18
|
Posted - 2015.09.24 16:49:12 -
[249] - Quote
Dextrome Thorphan wrote:I can't seem to get a refresh token with your EveAuthUtility tool, it's always blank... I do get the Encoded key though.
And an access token too, but when I try to use the access token in evelib, it's gives me the following error: {"Authentication needed, bad token"}
Any advice? Could I maybe send you my info through evemail so you could see what I'm doing wrong?
Sure, send it through evemail and I'll have a look. Are you sure you're using it correctly? I'm fairly certain it was working for both myself and others a while back. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
18
|
Posted - 2015.09.26 18:00:09 -
[250] - Quote
New updates for EveXml, Core, and AuthUtil.
EveCore: Made it easier to set your own cache and image paths. Simply set CachePath and ImagePath before instantiating the modules you want. Changing the path does not affect already initialized objects.
EveXml: Added support for all the recent updates and changes that I could find. This includes new endpoints, Bookmarks and ChatChannels, and some changes to existing endpoints. I aim to keep EveXml complete and up to date, so if any endpoints or data is missing, please let me know.
AuthUtil: Added a note in the text to remind users to enable CREST and add the publicData scope to your application at developers.eveonline.com. The URL is automatically placed in the users clipboard when generated. |
|

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 11:58:21 -
[251] - Quote
Updated EveWho, turns out it wasn't working very well at all. Everything should be working fine now, and the new version is up on nuget :) |

Dextrome Thorphan
Intrepid Crossing
135
|
Posted - 2015.10.03 12:18:01 -
[252] - Quote
Nice keep up the good work
I ran into a little issue with CREST: When I try to Query this Uri{"https://crest-tq.eveonline.com/market/10000002/orders/buy/?type=https://crest-tq.eveonline.com/types/12612/"} I get the following System.AggregateException:{"JSON integer 4258935401 is too large or small for an Int32. Path 'items[0].id', line 1, position 681."}
Do you maybe have a little example of how to fetch buy (or sell) orders? This is what I try to do:
var theForge = crest.GetRoot().Query(r => r.Regions).Query(r => r.Where(x => x.Name == "The Forge")).First(); theForge.MarketBuyOrders += "?type=" + itemList.Where(x => x.Type.Id == 12612).First().Type.Href; var buyOrders = theForge.Query(r => r.MarketBuyOrders).Items.ToList();
|

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 15:08:20 -
[253] - Quote
Try updating to the newest version, it should be fixed there. Please let me know if you're still having the issue with the newest version on nuget. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 15:13:38 -
[254] - Quote
Uhm, forgot I haven't actually published that fix on nuget. I wanted to release that together with some other fixes. I'll see if I can get it done later today, I'll post back here when I publish it. |

Dextrome Thorphan
Intrepid Crossing
135
|
Posted - 2015.10.03 15:25:03 -
[255] - Quote
Icahmura Hasaki wrote:Uhm, forgot I haven't actually published that fix on nuget. I wanted to release that together with some other fixes. I'll see if I can get it done later today, I'll post back here when I publish it.
Hehe ok, thanks  |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 16:31:29 -
[256] - Quote
Dextrome Thorphan wrote:Icahmura Hasaki wrote:Uhm, forgot I haven't actually published that fix on nuget. I wanted to release that together with some other fixes. I'll see if I can get it done later today, I'll post back here when I publish it. Hehe ok, thanks 
If you use the source from github the fix is in there, feel free to test it. |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 16:44:11 -
[257] - Quote
From: https://developers.eveonline.com/blog/article/aegis-sovereignty-api-changes
ALLIANCES We have added two new optional fields to the alliances resource. Those fields are the primeHour and capitalSystem.
I can't find these fields anywhere in the alliances/ or the alliance/ resources, anyone got any idea why ? |

Icahmura Hasaki
Bearded BattleBears I N F A M O U S
19
|
Posted - 2015.10.03 17:42:12 -
[258] - Quote
Just pushed a new version of EveCrest to nuget, 3.1.0, which includes a fix for the MarketOrder ID, and adds support for the sovereignty endpoints. |

Malketh Terona
BOVRIL bOREers Mining CO-OP RAZOR Alliance
3
|
Posted - 2015.10.21 23:59:01 -
[259] - Quote
Trying to install this in a Universal app project in VS2015 and I'm getting an error message stating that all of the packages are "not compatible with UAP,Version=v10.0 (win10-x64-aot)". Thought you might like to know. |

Dextrome Thorphan
Intrepid Crossing
135
|
Posted - 2015.10.22 15:10:14 -
[260] - Quote
Icahmura Hasaki wrote:Dextrome Thorphan wrote:Icahmura Hasaki wrote:Uhm, forgot I haven't actually published that fix on nuget. I wanted to release that together with some other fixes. I'll see if I can get it done later today, I'll post back here when I publish it. Hehe ok, thanks  If you use the source from github the fix is in there, feel free to test it.
Ah sorry, haven't had the chance to get around to it yet, will check it out some time this week and will let you know :) |
|

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.22 22:25:03 -
[261] - Quote
Malketh Terona wrote:Trying to install this in a Universal app project in VS2015 and I'm getting an error message stating that all of the packages are "not compatible with UAP,Version=v10.0 (win10-x64-aot)". Thought you might like to know.
Thanks for the feedback, I'll have a look at it :) |

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.22 22:27:18 -
[262] - Quote
Dextrome Thorphan wrote:Icahmura Hasaki wrote:Dextrome Thorphan wrote:Icahmura Hasaki wrote:Uhm, forgot I haven't actually published that fix on nuget. I wanted to release that together with some other fixes. I'll see if I can get it done later today, I'll post back here when I publish it. Hehe ok, thanks  If you use the source from github the fix is in there, feel free to test it. Ah sorry, haven't had the chance to get around to it yet, will check it out some time this week and will let you know :)
Your issue has been fixed in the newest version on nuget, along with some other things. |

Groot DeStefano
Brave Newbies Inc. Brave Squids
0
|
Posted - 2015.10.23 16:12:24 -
[263] - Quote
Thanks for your work! Where can I find some kind of documentation about the code? As a c# noob, i am struggeling (crest market stuff...). I get System.AggregateException errors.
|

Revigon VI
Ministry of War Amarr Empire
0
|
Posted - 2015.10.24 20:23:50 -
[264] - Quote
Heya. Great work so far but ... do you plan move your lib's to be able to use them on Universal Windows Platform? |

Dextrome Thorphan
Intrepid Crossing
135
|
Posted - 2015.10.25 08:52:19 -
[265] - Quote
Groot DeStefano wrote:Thanks for your work! Where can I find some kind of documentation about the code? As a c# noob, i am struggeling (crest market stuff...). I get System.AggregateException errors.
Take a look at the inner exception, see if you can't find a more specific error message - System.AggregateException is quite vague ;)
There's some general explanation & code samples over here, at the bottom: https://github.com/ezet/evelib |

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.25 11:31:26 -
[266] - Quote
Groot DeStefano wrote:Thanks for your work! Where can I find some kind of documentation about the code? As a c# noob, i am struggeling (crest market stuff...). I get System.AggregateException errors.
As Dextrome mentioned, you need to look at the inner exception. The 'real' exceptions get wrapped in Aggregate exceptions because of the async code, so there could be more of them. The inner exception is a property of the Aggregate one. Please let me know if something isn't working correctly so I can fix it ;)
|

Ocean Cineol
Too Big To Die
0
|
Posted - 2015.10.25 23:02:09 -
[267] - Quote
Thanks for your help, I learned quiet a bit!
var BlackRise = crest.GetRoot().Query(a => a.Regions).Query(b=> b.Where(x => x.Name == "BlackRise")).First(); BlackRise.MarketBuyOrders = "?type=" + /* what should be here? */; var allbuys = BlackRise.Query(c=> c.MarketBuyOrders).Items.ToList();
the code starts at the root , finds the first fitting ID for my region. Then i should query the the type of order(buy/sell) and the TypeID of my desired Item. (here i fail badly) Then it is saved to the cachefiles. Dextrome Thorphan, your code really helped to try to understand that stuff. The exception happens, because i fail to query the typeID in the right way and the uri is wrong. Cheers! |

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.26 06:54:31 -
[268] - Quote
Ocean Cineol wrote:Thanks for your help, I learned quiet a bit!
var BlackRise = crest.GetRoot().Query(a => a.Regions).Query(b=> b.Where(x => x.Name == "BlackRise")).First(); BlackRise.MarketBuyOrders = "?type=" + /* what should be here? */; var allbuys = BlackRise.Query(c=> c.MarketBuyOrders).Items.ToList();
the code starts at the root , finds the first fitting ID for my region. Then i should query the the type of order(buy/sell) and the TypeID of my desired Item. (here i fail badly) Then it is saved to the cachefiles. Dextrome Thorphan, your code really helped to try to understand that stuff. The exception happens, because i fail to query the typeID in the right way and the uri is wrong. Cheers!
The API for passing along parameters isn't really finished, which is why you're not finding any examples of how to pass in the type. I can't test this right now, but you could try to do eg.
BlackRise.MarketBuyOrders += "?type=https://public-crest.eveonline.com/types/2/";
And then query that., it might work unless I'm forgetting something :) Also
var allbuys = BlackRise.Query(c=> c.MarketBuyOrders).AllItems();
would you give ALL items in the list by going through all pages, Items().ToList() would only return the items from page you are requesting.
I should make it clear that any way of passing parameters that you find working now, isn't officially supported and might change in the future. I'll try and find good way to handle both parameters and POST requests shortly. |

Dextrome Thorphan
Intrepid Crossing
135
|
Posted - 2015.10.26 11:18:59 -
[269] - Quote
-nvm, misunderstood- (too bad you can't delete replies) |

Groot DeStefano
Brave Newbies Inc. Brave Squids
0
|
Posted - 2015.10.26 15:50:43 -
[270] - Quote
System.AggregateException HResult=-2146233088 Source=mscorlib StackTrace: bei System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) bei System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) bei System.Threading.Tasks.Task`1.get_Result() bei eZet.EveLib.EveCrestModule.EveCrest.Load[T](Href`1 uri) bei eZet.EveLib.EveCrestModule.Models.Resources.CrestResource`1.Query[TOut](Func`2 objFunc) bei ConsoleApplication4.Test.Main(String[] args) in C:\Users\***\Documents\Visual Studio 2015\Projects\ConsoleApplication4\ConsoleApplication4\Program.cs:Zeile 76. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ThreadHelper.ThreadStart_Context(Object state) bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) bei System.Threading.ThreadHelper.ThreadStart() InnerException: HResult=-2146233088 LineNumber=1 LinePosition=694 Message=JSON integer 4294091884 is too large or small for an Int32. Path 'items[0].id', line 1, position 694. Path=items[0].id Source=Newtonsoft.Json
var crest = new EveCrest(); var root = crest.GetRoot(); var theForge = crest.GetRoot().Query(r => r.Regions).Query(r => r.Where(x => x.Name == "The Forge")).First(); theForge.MarketBuyOrders += "?type=https://public-crest.eveonline.com/types/34/"; var allbuys = theForge.Query(c => c.MarketBuyOrders).Items.ToList();
With "?type=https://public-crest.eveonline.com/types/2/"; the code is running...
P.S. AllItems is not working. |
|

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.26 16:10:14 -
[271] - Quote
Groot DeStefano wrote:System.AggregateException HResult=-2146233088 Source=mscorlib StackTrace: bei System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) bei System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) bei System.Threading.Tasks.Task`1.get_Result() bei eZet.EveLib.EveCrestModule.EveCrest.Load[T](Href`1 uri) bei eZet.EveLib.EveCrestModule.Models.Resources.CrestResource`1.Query[TOut](Func`2 objFunc) bei ConsoleApplication4.Test.Main(String[] args) in C:\Users\***\Documents\Visual Studio 2015\Projects\ConsoleApplication4\ConsoleApplication4\Program.cs:Zeile 76. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ThreadHelper.ThreadStart_Context(Object state) bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) bei System.Threading.ThreadHelper.ThreadStart() InnerException: HResult=-2146233088 LineNumber=1 LinePosition=694 Message=JSON integer 4294091884 is too large or small for an Int32. Path 'items[0].id', line 1, position 694. Path=items[0].id Source=Newtonsoft.Json var crest = new EveCrest(); var root = crest.GetRoot(); var theForge = crest.GetRoot().Query(r => r.Regions).Query(r => r.Where(x => x.Name == "The Forge")).First(); theForge.MarketBuyOrders += "?type=https://public-crest.eveonline.com/types/34/"; var allbuys = theForge.Query(c => c.MarketBuyOrders).Items.ToList(); With "?type=https://public-crest.eveonline.com/types/ 2/"; the code is running... P.S. AllItems is not working. Edit: i get it, the Nuget version is not updated yet :)
Are you using the newest version of EveCrest, 3.1.0? At least it seems that way of providing a type parameter works. I thought the int32 problem was fixed in the newest version on nuget. I'll have a look in an hour or two.
|

Groot DeStefano
Brave Newbies Inc. Brave Squids
0
|
Posted - 2015.10.26 18:08:48 -
[272] - Quote
AllItems is working! |

Icahmura Hasaki
Perkone Caldari State
19
|
Posted - 2015.10.26 19:07:25 -
[273] - Quote
I've added a possible implementation for passing parameters, as simple key/value string pairs that can be included in .Load() or .Query() calls.
Example:
var orders = crest.GetRoot().Query(r => r.Regions) .Query(x => x.Single(r => r.Name == "The Forge")) .Query(r => r.MarketBuyOrders, "type", "https://public-crest.eveonline.com/types/34/");
This isn't very safe tho as is very apt to typing bugs. It also allows partly user constructed URLs, which breaks some of the goals with CREST.
So should I perhaps disallow manual URLs like the example above, and do something like this:
var type = crest.GetRoot().Query(r => r.MarketTypes).Items.Single(r => r.Type.Id == 34); var orders = crest.GetRoot().Query(r => r.Regions) .Query(x => x.Single(r => r.Name == "The Forge")) .Query(r => r.MarketBuyOrders, "type", type);
Where you first need to get the type you want through CREST, and you pass that in directly? It would still be possible to construct URLs manually if you really wanted, but is more in line with the stated goals for CREST.
The parameter name is still manually typed, but I'm not sure if it is worth the hassle to enforce that with eg. enums or a parameter object for each name/value pair ? I'm open for input on how you would like this to be implemented :)
The first example is valid for the newest version on github if anyone wants to try it out. It allows an arbitrary amount of name/value pairs, and works for all types of resources that support it, eg. market types, market groups, and so on. |

Erick1111
Quarantine Corporation
0
|
Posted - 2015.10.29 14:56:44 -
[274] - Quote
Really nice work doing this tool btw! I love it. I'm having an issue when I try to load a character image. I'm probably doing something wrong, but I can't figure out what exactly... Here's my code:
byte[] charImg = img.GetCharacterPortraitData(characterList[0].CharacterId, eZet.EveLib.EveXmlModule.Image.CharacterPortraitSize.X64); charPortrait.Source = ByteToImage(charImg);
When I call GetCharacterPortraitData, it just doesn't go any further as if the thread would never be comming to an end. I've tried accessing it directly on my web browser and it works, and I've also tried crest.LoadImage() with the uri, and I get the exact same issue...
You have an idea what could be the cause? |

Ocean Cineol
Too Big To Die
0
|
Posted - 2015.10.29 20:34:58 -
[275] - Quote
Good evening! I am trying to access the cached files.
string savedstuff= IEveLibCache.LoadAsync(Uri.uri);
I believe that EveLibApiBase creates the Uri, but I can't use it. What do I have to enter for Uri.uri? Thanks... |

Icahmura Hasaki
Perkone Caldari State
20
|
Posted - 2015.10.29 22:21:52 -
[276] - Quote
Erick1111 wrote:Really nice work doing this tool btw! I love it. I'm having an issue when I try to load a character image. I'm probably doing something wrong, but I can't figure out what exactly... Here's my code: byte[] charImg = img.GetCharacterPortraitData(characterList[0].CharacterId, eZet.EveLib.EveXmlModule.Image.CharacterPortraitSize.X64); charPortrait.Source = ByteToImage(charImg);
When I call GetCharacterPortraitData, it just doesn't go any further as if the thread would never be comming to an end. I've tried accessing it directly on my web browser and it works, and I've also tried crest.LoadImage() with the uri, and I get the exact same issue... You have an idea what could be the cause?
I haven't really tested that part of the library much, and it's been a long long time since I touched it. I'll have a look at it tomorrow and get back to you with a solution :) |

Icahmura Hasaki
Perkone Caldari State
20
|
Posted - 2015.10.30 08:19:02 -
[277] - Quote
Ocean Cineol wrote:Good evening! I am trying to access the cached files. string savedstuff= IEveLibCache.LoadAsync(Uri.uri);
I believe that EveLibApiBase creates the Uri, but I can't use it. What do I have to enter for Uri.uri? Thanks...
I don't quite understand what exactly you are trying to accomplish? The cached files are stored as plain xml and json files in the cache dir. You can load the files through an instance of IEveLibCache, but not the interface itself.
If you told me more about what you are trying to accomplish I might be able to help you more. |

Ocean Cineol
Too Big To Die
0
|
Posted - 2015.10.30 10:41:00 -
[278] - Quote
Your code works fine, I am just trying to implement the IEveLibCache Interface to load the cached data. Seems like I went down too deep. |

Icahmura Hasaki
Perkone Caldari State
20
|
Posted - 2015.10.30 18:49:42 -
[279] - Quote
Ocean Cineol wrote:Your code works fine, I am just trying to implement the IEveLibCache Interface  to load the cached data. Seems like I went down too deep.
Ah, okay. Well, your idea should work fine, if thats how you want to do it. As I said, the cached files are available in the CachePath as plain text files, with the filenames being a hash of the url they represent. So if you want to implement your own IEveLibCache to read files stored by my implementation, you need to use the same hash to retrieve the correct file. You'll find the details in my EveLibFileCache, its just a SHA1 with the hyphens (-) removed. |

Erick1111
Quarantine Corporation
0
|
Posted - 2015.10.30 22:21:30 -
[280] - Quote
Icahmura Hasaki wrote:Erick1111 wrote:Really nice work doing this tool btw! I love it. I'm having an issue when I try to load a character image. I'm probably doing something wrong, but I can't figure out what exactly... Here's my code: byte[] charImg = img.GetCharacterPortraitData(characterList[0].CharacterId, eZet.EveLib.EveXmlModule.Image.CharacterPortraitSize.X64); charPortrait.Source = ByteToImage(charImg);
When I call GetCharacterPortraitData, it just doesn't go any further as if the thread would never be comming to an end. I've tried accessing it directly on my web browser and it works, and I've also tried crest.LoadImage() with the uri, and I get the exact same issue... You have an idea what could be the cause? I haven't really tested that part of the library much, and it's been a long long time since I touched it. I'll have a look at it tomorrow and get back to you with a solution :)
Well, I got it to work using the synchronous methods of WebClient and replaced the code consequently in your project. I wont use async until later in my app.
I was also getting troubles with EveCrest.LoadImage() I,m just trying to confirm with you that these are actual bugs and not some mess up on my side before I try and invest time in it.
Thanks |
|

Ocean Cineol
Too Big To Die
0
|
Posted - 2015.10.31 15:45:38 -
[281] - Quote
Icahmura Hasaki wrote:Ocean Cineol wrote:Your code works fine, I am just trying to implement the IEveLibCache Interface  to load the cached data. Seems like I went down too deep. Ah, okay. Well, your idea should work fine, if thats how you want to do it. As I said, the cached files are available in the CachePath as plain text files, with the filenames being a hash of the url they represent. So if you want to implement your own IEveLibCache to read files stored by my implementation, you need to use the same hash to retrieve the correct file. You'll find the details in my EveLibFileCache, its just a SHA1 with the hyphens (-) removed.
I need a few tips. I always want to save the query results in the same simple .txt file. To load more than 1 item, i increment the ID of the item by 1 in the url(is there a better option?). I end up with lots and lots of files.
To access these with a program i either need to know the right url-hash for every id (i could not figure out how to do that ) or I load it with the cache implementation.
I think that that is the right way to load the cached data:
string cachePath= @"C:\Users\*****\AppData\Roaming\EveLib\EveCrestCache"; string cacheregister= "???"; EveLibFileCache cache = new EveLibFileCache(cachePath, cacheregister);
Console.WriteLine(cache.LoadAsync(Uri);
Could somebody help me with the right code? Thanks a lot :) |

Icahmura Hasaki
Perkone Caldari State
20
|
Posted - 2015.10.31 16:08:17 -
[282] - Quote
Ocean Cineol wrote:Icahmura Hasaki wrote:Ocean Cineol wrote:Your code works fine, I am just trying to implement the IEveLibCache Interface  to load the cached data. Seems like I went down too deep. Ah, okay. Well, your idea should work fine, if thats how you want to do it. As I said, the cached files are available in the CachePath as plain text files, with the filenames being a hash of the url they represent. So if you want to implement your own IEveLibCache to read files stored by my implementation, you need to use the same hash to retrieve the correct file. You'll find the details in my EveLibFileCache, its just a SHA1 with the hyphens (-) removed. I need a few tips. I always want to save the query results in the same simple .txt file. To load more than 1 item, i increment the ID of the item by 1 in the url(is there a better option?). I end up with lots and lots of files. To access these with a program i either need to know the right url-hash for every id (i could not figure out how to do that ) or I load it with the cache implementation. I think that that is the right way to load the cached data: string cachePath= @"C:\Users\*****\AppData\Roaming\EveLib\EveCrestCache"; string cacheregister= "???"; EveLibFileCache cache = new EveLibFileCache(cachePath, cacheregister);
Console.WriteLine(cache.LoadAsync(Uri);
Could somebody help me with the right code? Thanks a lot :)
The cacheRegister is just a file name, its the file that will be used to keep track of cache times, so it knows when the cache is outdated eg.
The above code should be fine, except how you use the results from LoadAsync(). That just returns a Task, so to access that you would have to either use async await, or in a console application where you just want to print, you can use
Console.WriteLine(cache.LoadAsync(uri).Result);
Accessing .Result forces synchronization, which in general isn't a good way to do that, but in a simple test app it's fine.
|

iwannadig
Impersonal Department Special Operations RUST415
15
|
Posted - 2015.11.17 20:41:53 -
[283] - Quote
I downloaded the latest NuGet and try to create authenticated CREST, but I see only one contstructor for public CREST: http://i.imgur.com/87IExUI.png
What am I doing wrong?
Btw, https://developers.eveonline.com/resource/single-sign-on link in github readme is dead. |

Icahmura Hasaki
Perkone Caldari State
21
|
Posted - 2015.11.17 20:47:19 -
[284] - Quote
That looks like an old version, where did you download from exactly ? |

iwannadig
Impersonal Department Special Operations RUST415
15
|
Posted - 2015.11.17 20:55:46 -
[285] - Quote
Icahmura Hasaki wrote:That looks like an old version, where did you download from exactly ? Oh, I see. It shows 2.0.5.2, while the latest is 3.0.0. I'm using VS 2010 with .NET 4.0, so I think this is the reason. Did you move to 4.5? |

Quackers Duckington
CK-0FF Phoebe Freeport Republic
2
|
Posted - 2015.12.27 18:27:47 -
[286] - Quote
Does anyone have any examples of going through a whole users wallet using the lastid in the xmlapi in C#, Im having a mental block and just cant get it to work for the life of me =/ |

Malkys en Daire
Terra Nanotech Yulai Federation
3
|
Posted - 2015.12.30 11:23:03 -
[287] - Quote
First off: Awesome work from the dev here!
I'm already doing some marketstuff with it, like reading orders, prices, regions etc.
But I can't get a touch on market history data, just because I don't find the right "path" to it. Can somebody give me a quick hint?
Thanks! |

Jarno Midumulf
Riders of Sleipnir
11
|
Posted - 2016.01.05 12:50:27 -
[288] - Quote
Icahmura Hasaki wrote:Malketh Terona wrote:Trying to install this in a Universal app project in VS2015 and I'm getting an error message stating that all of the packages are "not compatible with UAP,Version=v10.0 (win10-x64-aot)". Thought you might like to know. Thanks for the feedback, I'll have a look at it :)
first, thx for all the work on this project!
is there any news on when this will be available for universal apps ? |

Crow LightBringer
Dropbears Anonymous Friendly Probes
0
|
Posted - 2016.01.15 01:31:50 -
[289] - Quote
Hey There
Currently trying to use your API for a personal project. I got the SSO going and works nice. I have however hit a brickwall when trying to figure out how to get the charId from the authed char.
Have tried:
var character = eveCrest.GetRoot().Query(r => r.Decode).Query(decode => decode.Character);
But I can't access the different results it should have returned. (Like, name, standings, corp, alliance, charId, ect.)
If you have time to help understand what I am missing here, I would be grateful.
Thanks for the work with this API. Really makes some steps easy and nice :D |

Evalla von'Shurr
von'Shurr Inc
0
|
Posted - 2016.01.17 22:15:15 -
[290] - Quote
Hello, for some reason the Query method doesn't want to take more than 2 arguments.
When I try to do:
var allbuys = theforge.Query(r => r.MarketBuyOrders, "type", "https://public-crest.eveonline.com/types/34/");
It throws me overload.
I'm using VS2012, should I change to VS2015? (VS12 supports .net 4.5)
Thanks in advance, btw, great work. |
|

Jarno Midumulf
Riders of Sleipnir
11
|
Posted - 2016.01.21 09:25:45 -
[291] - Quote
i got the EVE SSO working last night and wanted to reach the latest endpoints whit the player location.. but for some reason i cant find them..??
i did use this to call the right crest init: EveCrest crest = new EveCrest(refreshToken, base64Key);
any help is welcome!
|

Jarno Midumulf
Riders of Sleipnir
11
|
Posted - 2016.02.14 17:55:47 -
[292] - Quote
nice!!
i didnt had the time yet to take a good look at it.. do you have a list of wat end points are missing? we could make bugs for each one that is missing? |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.14 18:06:48 -
[293] - Quote
Jarno Midumulf wrote:nice!!
i didnt had the time yet to take a good look at it.. do you have a list of wat end points are missing? we could make bugs for each one that is missing?
I'm almost done with all the new GET resources, managing fittings, contacts and waypoints will take some more time. They can all be retrieved, but not changed. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.14 19:47:52 -
[294] - Quote
I have pushed an update for EveCrest to NuGet. Please test it out and let me know if anyone is having issues. It's been a long time since I worked on this, it might be possible that I have to push an update for Core too, and I'll do that if anyone is having issues.
Release notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.2.0 |

Aio Kaze
Perkone Caldari State
1
|
Posted - 2016.02.15 03:09:10 -
[295] - Quote
I'm pretty new to the whole C# thing (Literally my first time outside of mucking around in Unity) so this might just be me being stupid but I'm having a problem with that new CREST version you released.
I have the following code with a TextBox in an otherwise empty Windows Form Project (pared down for testing this error):
using System; using System.Linq; using System.Windows.Forms; using System.IO; using eZet.EveLib.EveCrestModule;
namespace EveCrestTypesTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void textBox1_TextChanged(object sender, EventArgs e) {
}
private void Form1_Load(object sender, EventArgs e) { LoadTypes(); }
private void LoadTypes() { textBox1.Text += "Setting up.\r\n"; EveCrest crest = new EveCrest(); var root = crest.GetRoot(); textBox1.Text += "Testing types loading.\r\n"; var types = root.Query(r => r.MarketTypes); var list = types.Items.ToList(); while (types.Next != null) { try { types = types.Query(t => t.Next); list.AddRange(types.Items); textBox1.Text += list.Count + " types loaded.\r\n"; } catch(AggregateException e) { File.AppendAllText(Application.StartupPath + "\\logs\\log.txt", e.InnerException.ToString() + "\r\n\r\n"); MessageBox.Show("Wrote error to file."); System.Environment.Exit(e.InnerException.HResult); } } textBox1.Text += "Types loaded."; } } }
If I add the current NuGet version of EveLib (3.0.0, I don't see 3.2.0 over there) as a project reference, everything compiles fine and the program loads all of the types, with no exceptions. However, if I grab 3.2.0 from GitHub, compile it and use that as a reference, I get the following exception thrown:
eZet.EveLib.EveCrestModule.Exceptions.EveCrestException: The query parameter page were cast able to type integerType, error invalid literal for long() with base 10: '2?' ---> System.Net.WebException: The remote server returned an error: (415) Unsupported Media Type. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.15 08:27:30 -
[296] - Quote
Thanks for the feedback, I've removed 3.2.0 from NuGet for now and I'll attempt to fix it tonight. |

NullBy7e
Star Nation Elemental Tide
0
|
Posted - 2016.02.15 09:40:44 -
[297] - Quote
Good to see that EveLib is still actively maintained. Yeah, NuGet is not up to date with the master branch, I just downloaded the source and added the projects separately in my solution. |

Aio Kaze
Perkone Caldari State
1
|
Posted - 2016.02.15 17:49:49 -
[298] - Quote
Is there a specific function for getting CREST market history data without constructing URLS? The only function I've found is GetMarketHistory(int regionID, int typeID) and its Async version, both of which are marked as obsolete and tell me to navigate to an endpoint from the root, but I can't find one.
As a sidenote, individual Regions don't seem to contain their IDs, meaning I have to go back up to the RegionCollection and find it again from there. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.15 17:55:37 -
[299] - Quote
Aio Kaze wrote:Is there a specific function for getting CREST market history data without constructing URLS? The only function I've found is GetMarketHistory(int regionID, int typeID) and its Async version, both of which are marked as obsolete and tell me to navigate to an endpoint from the root, but I can't find one.
As a sidenote, individual Regions don't seem to contain their IDs, meaning I have to go back up to the RegionCollection and find it again from there.
The "correct" way to currently is to construct urls and append them as explained 1 or 2 pages back, unfortunately. I'll be looking into that next, after this update. I'll have a look at region IDs, just fixed the issue you mentioned earlier about the new version :) |

Aio Kaze
Perkone Caldari State
1
|
Posted - 2016.02.15 18:20:44 -
[300] - Quote
Icahmura Hasaki wrote:Aio Kaze wrote:Is there a specific function for getting CREST market history data without constructing URLS? The only function I've found is GetMarketHistory(int regionID, int typeID) and its Async version, both of which are marked as obsolete and tell me to navigate to an endpoint from the root, but I can't find one.
As a sidenote, individual Regions don't seem to contain their IDs, meaning I have to go back up to the RegionCollection and find it again from there. The "correct" way to currently is to construct urls and append them as explained 1 or 2 pages back, unfortunately. I'll be looking into that next, after this update. I'll have a look at region IDs, just fixed the issue you mentioned earlier about the new version :) edit: var BlackRise = crest.GetRoot().Query(a => a.Regions).Query(b=> b.Single(x => x.Name == "BlackRise")); BlackRise.MarketBuyOrders += "?type=https://public-crest.eveonline.com/types/2/"; var orders = BlackRise.Query(c=> c.MarketBuyOrders).AllItems(); So you get find the MarketOrders resource from the root, but you have to append the type parameter.
Ah, okay. I was confused because the GetMarketHistory() obsolete message was specifically telling me to look for something in the root and had wondered if something had changed in the couple months since that post.
Also, that was fast. :) |
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.15 18:26:08 -
[301] - Quote
The EveCrest.GetX() functions are leftovers from the initial versions, and uses hardcoded URLs to access the resouces ,which is why they are deprecated. They will be removed for the next major release, since they are breaking changes. Just fixed the missing RegionID, anything else I should get done before I release this version? |

Aio Kaze
Perkone Caldari State
1
|
Posted - 2016.02.15 18:32:38 -
[302] - Quote
I haven't come across any other errors so that should be everything I noticed fixed. :) |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.15 19:15:53 -
[303] - Quote
New version of EveCrest available here: https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.2.1
Release notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.2.1 |

Jarno Midumulf
Riders of Sleipnir
11
|
Posted - 2016.02.16 22:31:39 -
[304] - Quote
nice!
how far are you whit contact write ? (not sure how i can add that my self..).
i will keep an eye out on te git repo and add what i can and make bug reports for the things i dont know how |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.17 07:50:15 -
[305] - Quote
Jarno Midumulf wrote:nice! how far are you whit contact write ? (not sure how i can add that my self..). i will keep an eye out on te git repo and add what i can and make bug reports for the things i dont know how Edit: you didn't update "EveAuth" in nuget?
EveAuth will be updated tonight. Is that causing any issues now ?
Crest POST/PUT/DELETE is still a ways off because I still haven't decided how I want the API to look, and as far as I remember I had some issues with POST or PUT last time I tried. |

Jarno Midumulf
Riders of Sleipnir
11
|
Posted - 2016.02.17 08:29:10 -
[306] - Quote
Icahmura Hasaki wrote:Jarno Midumulf wrote:nice! how far are you whit contact write ? (not sure how i can add that my self..). i will keep an eye out on te git repo and add what i can and make bug reports for the things i dont know how Edit: you didn't update "EveAuth" in nuget? EveAuth will be updated tonight. Is that causing any issues now ? Crest POST/PUT/DELETE is still a ways off because I still haven't decided how I want the API to look, and as far as I remember I had some issues with POST or PUT last time I tried. This is what I'll be working on next however, so it might be done in a few days.
if you use it to get the auth url and if you use it to out then yeah.. you added char location but not the scope to it... so you can not get the char location without the correct scope ;)
i did push a fix to git last night, didn't add the other missing scopes yet since those are not int use yet.. but i can add those as well if you want.
it would be nice if you can get the contacts to work (or just the post, put, delete in general), working on a project that needs it ;) do you mind sharing what the problem is? |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.17 18:08:17 -
[307] - Quote
New version of EveAuth: https://www.nuget.org/packages/eZet.EveLib.EveAuth/3.0.1
Release notes: https://github.com/ezet/evelib/releases/tag/EveAuth_v3.0.1 |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.17 20:09:23 -
[308] - Quote
I also forgot to add that EveCrest supports parameters now.
Added support for parameters. Each parameter must consist of a name and value pair. Example: region.Query(r => r.MarketBuyOrders, "type", "https://public-crest.eveonline.com/types/34/");
The old way of appending the query string at the end of the href still works, but the above way is cleaner. Ideally, you should fetch the type first, and then use the type.Url as a parameter instead of a hardcoded string.
Also, is there any way at all to navigate from crest root to market history? If not I will remove the deprecated tag from this and keep it around. |

Aio Kaze
Black Shell Industries
1
|
Posted - 2016.02.17 20:53:16 -
[309] - Quote
https://forums.eveonline.com/default.aspx?g=posts&t=403600
Not yet, but it's on their (very long) list of things to fix. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.17 22:49:20 -
[310] - Quote
Ah, thanks for that. I'm making good progress on the post/put/delete requests, so I might be able to finish it this weekend. |
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.19 17:36:34 -
[311] - Quote
Still learning how to use the library. I have used the Query MarketTypes to get a list of the market types. Each MarketTypeCollection Item has has two properties MarketGroup and Type.
I would like to get an ItemType object from the Type's Uri and the icon from the Icon's Uri. How do I run a query on these and what type of object do I put it in?
For example Plagioclase (note it won't let me put more explicit text because it says no html even though I see links in previous posts), I would like to get an ItemType object so I can access the properties and attributes of items and an Image object.
Also, the MargetGroup property for Plagioclase has it's Uri set correctly, but it's Name property is null. Is this intentional and I would have to put the correct name string in this object by getting it from either the endpoint itself or my MarketGroup list retrieved from a Query of MarketGroups, or is this a bug and it should be populated. The Type property has it's Name is set to "Plagioclase".
Another question, does your web access abide by the 120 request per second with 400 request per seconds burst and 20 open connections limits specified for Crest?
I have the latest source code from github so if you want you could reference the source code in any explanations.
Thank you in advance. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.20 10:28:56 -
[312] - Quote
Xiaou Bijoun wrote:Still learning how to use the library. I have used the Query MarketTypes to get a list of the market types. Each MarketTypeCollection Item has has two properties MarketGroup and Type.
I would like to get an ItemType object from the Type's Uri and the icon from the Icon's Uri. How do I run a query on these and what type of object do I put it in?
For example Plagioclase (note it won't let me put more explicit text because it says no html even though I see links in previous posts), I would like to get an ItemType object so I can access the properties and attributes of items and an Image object.
Also, the MargetGroup property for Plagioclase has it's Uri set correctly, but it's Name property is null. Is this intentional and I would have to put the correct name string in this object by getting it from either the endpoint itself or my MarketGroup list retrieved from a Query of MarketGroups, or is this a bug and it should be populated. The Type property has it's Name is set to "Plagioclase".
I'll have a look tonight
Quote:Another question, does your web access abide by the 120 request per second with 400 request per seconds burst and 20 open connections limits specified for Crest?
The RequestHandler has a threadpool of 20 threads for public and 10 for authenticated crest, and that is the only limit the library imposes. From what I can remember that amounts to roughly 50 requests per second. The size is configurable through the RequestHandler object on your EveCrest object. I might implement more sophisticated control some time, eg. bursts, but that's far down the road.
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.20 19:34:23 -
[313] - Quote
Here is a short example of achieving what you want, if I understand you correctly:
var marketType = (await crest.GetRoot().QueryAsync(r => r.MarketTypes)).Items.Single(i => i.Type.Name == "Plagioclase"); var itemType = await crest.LoadAsync(marketType.Type); var marketGroup = await crest.LoadAsync(marketType.MarketGroup); var itemIcon = await crest.LoadImageAsync(marketType.Type.Icon);
crest.LoadAsync() is the same as calling someresource.QueryAsync(), I know the naming is unfortunate. Notice how we cannot Query/Load the marketType object directly, because the marketType itself isn't a resource, and does not link anywhere. It does however contain two linked resources, Type and MarketGroup, which can be queried. crest.LoadImage() returns the image as a simple byte array. About the missing name, CREST does unfortunately not provide the MarketGroup name in the collection, so you will have to query the MarketGroup link for that. I have used the same base class as I use for all resource links, and I believe all others has a Name property but this one. I will probably remove the Name property in the next major version.
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.21 17:39:27 -
[314] - Quote
Thank you for that information. I had discovered the Load function but LoadAsync is better. I tried to put the Async functions in but with the await keyword, it wants the calls in a seperate async function, which I have not wrapped my head around yet. I removed the await keywords and it works, but the icon task never completes. I know the href is working, I can copy it from a watch window into a browser and get the image.
Here is my function...
MarketTypeInformation GetMarketTypeInformation(MarketTypeCollection.Item marketType) { MarketTypeInformation info = new MarketTypeInformation();
var itemType = eveCrest.LoadAsync(marketType.Type); var marketGroup = eveCrest.LoadAsync(marketType.MarketGroup); var itemIcon = eveCrest.LoadImageAsync(marketType.Type.Icon);
while (itemType.IsCompleted == false || marketGroup.IsCompleted == false || itemIcon.IsCompleted == false) ;
info.itemType = itemType.Result; info.marketGroup = marketGroup.Result;
using (var ms = new MemoryStream(itemIcon.Result)) { info.icon = Image.FromStream(ms); }
return (info); }
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.21 18:06:21 -
[315] - Quote
When I get the ItemType information of an item that contains DogmaAttribute and DogmaEffects, the Href parameters on those are null. How are you supposed to get the information for those? |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.21 22:46:54 -
[316] - Quote
Xiaou Bijoun wrote:When I get the ItemType information of an item that contains DogmaAttribute and DogmaEffects, the Href parameters on those are null. How are you supposed to get the information for those?
Those are not supposed to be null. I'll have a look tomorrow. I'll look at the icon too. If you want to use async, it should use async/await all the way up to your top level event handler or whatever is the topmost caller of your code. You might want to read up on async/await for that :)
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.22 00:13:11 -
[317] - Quote
Thank you, I will read up more on the await/async. If you do fully use await/async do you need the IsCompleted? |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.22 07:46:15 -
[318] - Quote
Xiaou Bijoun wrote:Thank you, I will read up more on the await/async. If you do fully use await/async do you need the IsCompleted?
No, then you would use the await keyword, or Task.AwaitAll(). |

NullBy7e
Star Nation Elemental Tide
0
|
Posted - 2016.02.22 08:20:35 -
[319] - Quote
Xiaou Bijoun wrote:Thank you, I will read up more on the await/async. If you do fully use await/async do you need the IsCompleted?
http://pastebin.com/U8JRNG7J
public async Task MarketTypeInformation GetMarketTypeInformationAsync(MarketTypeCollection.Item marketType) { var info = new MarketTypeInformation(); var itemType = eveCrest.LoadAsync(marketType.Type); var marketGroup = eveCrest.LoadAsync(marketType.MarketGroup); var itemIcon = eveCrest.LoadImageAsync(marketType.Type.Icon); using (var ms = new MemoryStream(await itemIcon)) { info.icon = Image.FromStream(ms); } info.itemType = await itemType; info.marketGroup = await marketGroup; return info; } public async void DoStuffAsync() { var marketTypeInfo = GetMarketTypeInformationAsync(); // //do stuff here that doesn't require the value/result of marketTypeInfo // // //await for the result // var marketTypeInfoResult = await marketTypeInfo; }
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.22 17:37:33 -
[320] - Quote
I've fixed bugs with the DogmaAttribute and DogmaEffect on ItemTypes, and they are now parsed correctly, I'll update EveCrest shortly.
I tested LoadImage and it's working fine, tested using the following code:
public async Task GetIcon() { var item = (await crest.GetRoot().QueryAsync(r => r.MarketTypes)).Items.First(); var icon = await crest.LoadImageAsync(item.Type.Icon); }
And I also did the same using the synchronous methods, both load the image data correctly.
|
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.22 19:08:18 -
[321] - Quote
EveCrest 3.2.2 is up: https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.2.2
Release notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.2.2 |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 15:24:19 -
[322] - Quote
The latest build of Crest v3.2.2 has caused previously compiling code to error.
I have been trying to post some details, but no matter what I do it thinks I am posting html. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 15:27:32 -
[323] - Quote
Xiaou Bijoun wrote:The latest build of Crest v3.2.2 has caused previously compiling code to error.
I have been trying to post some details, but no matter what I do it thinks I am posting html.
Post it on github or somewhere else, I can't do much without more information. |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 15:27:53 -
[324] - Quote
Basically, I created a list of MarketGroup by Querying the root which returns a MarketGroupCollection and converting to a List with ToList() function, but it now says that it can't convert from MarketGroupCollection.MarketGroupItem to MarketGroup. If I change my list to a MarketGroupCollection.MarketGroupItem I can get that code to compile but later on when I am building the Market Group TreeView (basically a clone of the Eve Market Window) the ParentGroup field is not available in the MarketGroupCollection.MarketGroupItem. I use the ParentGroup field to build the tree from the out of order list of MarketGroup items. This probably a misunderstanding of what classes I should be using to do this, but it did previously work with Crest 3.2.1.
Thank you |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 15:32:56 -
[325] - Quote
Xiaou Bijoun wrote:Basically, I created a list of MarketGroup by Querying the root which returns a MarketGroupCollection and converting to a List with ToList() function, but it now says that it can't convert from MarketGroupCollection.MarketGroupItem to MarketGroup. If I change my list to a MarketGroupCollection.MarketGroupItem I can get that code to compile but later on when I am building the Market Group TreeView (basically a clone of the Eve Market Window) the ParentGroup field is not available in the MarketGroupCollection.MarketGroupItem. I use the ParentGroup field to build the tree from the out of order list of MarketGroup items. This probably a misunderstanding of what classes I should be using to do this, but it did previously work with Crest 3.2.1.
Thank you
Got it, and I know why, I'll fix it in a few hours. I should probably spend more time testing before releasing, but I'm trying to push things out as quickly as possible now that I've got some time for it :)
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 15:59:03 -
[326] - Quote
No problem, your code has saved me hours of programming. I have worked on a library for months with barely a fraction of the functionality that you provide in this library. I appreciate your work and your timely addressing of issues. I know of professional companies that take longer to address issues.
I wish my skills were a little better because I might be able to help with the debugging of the library, but alas I am just a hacker and not the type everyone thinks are cool.
Do you have any idea why I have issues posting source code? I can get some stuff to go through and see it in the preview then all of a sudden it says it cannot contain html and erases everything I have tried to enter. I copied the code I posted from the other day and it went in with no problems. It would be so much easier to post source code examples.
By the way, I am also trying to do the same thing with Regions and run into a similar issue, but I will wait until I have the MarketGroups working again and see if I can figure it out on my own before I spring that on you.
I think some of my problem is visualizing the difference between the objects with Crest endpoints and the actual resource objects. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 18:07:49 -
[327] - Quote
EveCrest 3.2.3, reverting the model changes to MarketGroupCollection and MarketGroupItem in previous release. https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.2.3
https://github.com/ezet/evelib/releases/tag/EveCrest_v3.2.3 |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 18:55:44 -
[328] - Quote
Don't think me a pain, but just tried Crest v3.2.3 and the initial call to create an EveCrest object causes an exception.
eveCrest = new EveCrest();
From my log text...
Creating EveCrest object. Exception: System.MissingMethodException: Method not found: 'System.String eZet.EveLib.Core.Config.get_AppData()'. at eZet.EveLib.EveCrestModule.RequestHandlers.CachedCrestRequestHandler..ctor(ISerializer serializer) at eZet.EveLib.EveCrestModule.EveCrest..ctor() at EveCrestContest.frmMarketItems.frmMarketItems_Shown(Object sender, EventArgs e) in C:\EveCrestContest v1.0.0.4\EveCrestContest\frmMarketItems.cs:line 49
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 19:33:30 -
[329] - Quote
Xiaou Bijoun wrote:Don't think me a pain, but just tried Crest v3.2.3 and the initial call to create an EveCrest object causes an exception. eveCrest = new EveCrest();
From my log text...
Creating EveCrest object. Exception: System.MissingMethodException: Method not found: 'System.String eZet.EveLib.Core.Config.get_AppData()'. at eZet.EveLib.EveCrestModule.RequestHandlers.CachedCrestRequestHandler..ctor(ISerializer serializer) at eZet.EveLib.EveCrestModule.EveCrest..ctor() at EveCrestContest.frmMarketItems.frmMarketItems_Shown(Object sender, EventArgs e) in C:\EveCrestContest v1.0.0.4\EveCrestContest\frmMarketItems.cs:line 49
Not sure how that has happened, but try updating EveLib.Core in a few minutes, to v3.0.3, and let me know if that works.
|

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 19:43:04 -
[330] - Quote
Now the exception is
Creating EveCrest object. Exception: System.MissingFieldException: Field not found: 'eZet.EveLib.Core.Config.Separator'. at eZet.EveLib.EveCrestModule.RequestHandlers.CachedCrestRequestHandler..ctor(ISerializer serializer) at eZet.EveLib.EveCrestModule.EveCrest..ctor() at EveCrestContest.frmMarketItems.frmMarketItems_Shown(Object sender, EventArgs e) in D:\EveCrestContest v1.0.0.4\EveCrestContest\frmMarketItems.cs:line 49
|
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 19:45:16 -
[331] - Quote
Yeah, I know, update to EveCrest coming shortly, that will be the last one for tonight :P |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 19:53:24 -
[332] - Quote
Not a problem, this is not a urgent issue, just a hobby. Your help is appreciated. You must be in Europe or somewhere close? I am in Eastern U.S.
Thanks again. |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.23 19:55:02 -
[333] - Quote
Woot, that did it. Get some rest. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.23 20:03:07 -
[334] - Quote
Finally. EveXml has also been updated, as it had the same issues with the newest version of Core. I'm starting to doubt if it was a good idea to separate as it's becoming a nightmare to keep everything updated. Let me know if you run into any other issues. |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.24 19:04:22 -
[335] - Quote
I was looking into using the authed crest information and in order to get a refresh token and encoded key, you need to have a developer account and register the application. I got the developer account working. I tried to register my application but the problem is the URL callback. How do you get away with this on a desktop application? I have seen someone mention using localhost with an http listener but this seems problematic. I assume that you have already registered an application because you have a refresh token and encoded key in your EveCrest_Authed_Tests.cs file in the Eve Online Library project. I don't want to use that token and string since they are yours. You probably shouldn't even have them publicly available in the library should you?
Here one of the posts. https://forums.eveonline.com/default.aspx?g=posts&m=6356570#post6356570 |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.24 19:18:42 -
[336] - Quote
Xiaou Bijoun wrote:I was looking into using the authed crest information and in order to get a refresh token and encoded key, you need to have a developer account and register the application. I got the developer account working. I tried to register my application but the problem is the URL callback. How do you get away with this on a desktop application? I have seen someone mention using localhost with an http listener but this seems problematic. I assume that you have already registered an application because you have a refresh token and encoded key in your EveCrest_Authed_Tests.cs file in the Eve Online Library project. I don't want to use that token and string since they are yours. You probably shouldn't even have them publicly available in the library should you? Here one of the posts. https://forums.eveonline.com/default.aspx?g=posts&m=6356570#post6356570
Using a local http server is one solution yeah, there is no easy solution to this. You can use my EveAuthUtility to get the tokens manually. There isn't really much harm in having it public in my case. |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.26 04:28:01 -
[337] - Quote
In an earlier post you mentioned that there is a place to add your program name in App.Config. How do I go about setting this in my project? |

Xiaou Bijoun
Fly By Knight Enterprises
0
|
Posted - 2016.02.27 00:42:28 -
[338] - Quote
My code was running today but after the shutdown, I am now getting errors on the EveXml.GetCharInfoAsync() function.
System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: There is an error in XML document (0, 0). ---> System.Xml.XmlException: For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method.
I can get you more of the exception information if you need.
Thank you |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.27 08:45:49 -
[339] - Quote
Just add app.config in your project and change configuration->appSettings->eveLib.UserAgent if I remember correctly. It just changes the user agent user for http requests tho.
Let me know if still you have issues after the API is back up.
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.28 18:56:03 -
[340] - Quote
EveXml v3.0.4 is up, minor bugfix, get it here: https://www.nuget.org/packages/eZet.EveLib.EveXml.
Release notes: https://github.com/ezet/evelib/releases/tag/EveXml_v3.0.4 |
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.02.29 20:55:51 -
[341] - Quote
Support for post/put/delete is getting really close, I expect to put up a beta within the new few days. I'm implementing it using an active record pattern, but I'm open to feedback and ideas for other implementations if anyone has input.
An example of adding a new contact:
public async Task AddContact() { var contact = (await (await (await crest.GetRootAsync()).QueryAsync(r => r.Decode)).QueryAsync(r => r.Character)).Contacts.Create(); contact.Contact.Href = "https://crest-tq.eveonline.com/alliances/99000006/"; contact.Contact.Name = "test"; contact.Contact.Id = 99000006; contact.ContactType = "Alliance"; contact.Standing = 0; await contact.Save(); }
Editing:
public async Task DeleteContact() { var contacts = await (await (await (await crest.GetRootAsync()).QueryAsync(r => r.Decode)).QueryAsync(r => r.Character)).QueryAsync(r => r.Contacts); var contact = contacts.Items.Single(r => r.Contact.Id == 99000006); contact.Contact.Standing = 5; contact.Save();
And deleting:
public async Task DeleteContact() { var contacts = await (await (await (await crest.GetRootAsync()).QueryAsync(r => r.Decode)).QueryAsync(r => r.Character)).QueryAsync(r => r.Contacts); var contact = contacts.Items.Single(r => r.Contact.Id == 99000006); contact.Delete();
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.01 21:09:47 -
[342] - Quote
Can someone tell me whether the fitting resource supports put ? I've got post/put/delete working for contacts, and post/delete for fits, but I can't seem to get put working. Any ideas ? |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.03 17:19:28 -
[343] - Quote
Minor bugfix for EveXml: https://www.nuget.org/packages/eZet.EveLib.EveXml/3.0.5
Notes: https://github.com/ezet/evelib/releases/tag/EveXml_v3.0.5
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.03 19:39:29 -
[344] - Quote
For anyone wanting to test the post/put/delete features, a fully working version is available here: https://github.com/ezet/evelib/tree/beta
It currently supports all writable endpoints, that is: Contact: post, put, delete Fittings: post, delete Waypoints: post
For examples, please refer to https://github.com/ezet/evelib/blob/beta/EveLib.Tests/EveCrest_Authed_Tests%20.cs
or feel free to ask me.
If you have any concerns, suggestions or any feedback at all, please let me know :)
|

Xiaou Bijoun
Fly By Knight Enterprises
1
|
Posted - 2016.03.13 15:32:44 -
[345] - Quote
Does anyone know who to contact about the public crest server being down? |

Aio Kaze
Black Shell Industries
1
|
Posted - 2016.03.13 16:07:20 -
[346] - Quote
Any time I notice it's down I tweet to @EVE_Status. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.16 19:18:02 -
[347] - Quote
EveCrest 3.3 is out! This is a major feature release, introducing support for POST, PUT and DELETE requests.
https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.3.0
Release Notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.3.0 |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.16 20:17:31 -
[348] - Quote
I'm working on updating the Wiki with documentation for the new features.
https://github.com/ezet/evelib/wiki/Module:-EveCrest#post |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.17 19:40:20 -
[349] - Quote
EveCrest 3.3.2 is out, which cleans up some of the API introduced in 3.3. Relase notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.3.2
Also, a new version of EveXml was released yesterday, fixing TrainingStartTime and TrainingEndTime issues with the SkillInTraining endpoint. |

Laura Shimaya
Companion Cube Corp.
0
|
Posted - 2016.03.19 16:30:44 -
[350] - Quote
How to get all MarketTypes or ItemsTypes from Crest?
The following does nothing:
var items = crest.GetRoot().Query(x => x.MarketTypes).AllItems();
or
var items = crest.GetRoot().Query(x => x.ItemTypes).AllItems();
I tried this:
var item = crest.GetRoot().Query(x => x.ItemTypes).Query(x => x.Single(r => r.Name == "Medium Remote Armor Repairer II"));
But this does nothing as wel.
I want to get Items by name and then pass their HREF as a parameter to the following instead of the hardcoded url:
var theforge = crest.GetRoot().Query(r => r.Regions).Query(x => x.Single(r => r.Name == "The Forge")); var orders = theforge.Query(r => r.MarketBuyOrders, "type", "https://public-crest.eveonline.com/types/20414/");
Thanks in advance! |
|

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.19 20:19:43 -
[351] - Quote
Laura Shimaya wrote:How to get all MarketTypes or ItemsTypes from Crest?
The following does nothing:
var items = crest.GetRoot().Query(x => x.MarketTypes).AllItems();
or
var items = crest.GetRoot().Query(x => x.ItemTypes).AllItems();
I tried this:
var item = crest.GetRoot().Query(x => x.ItemTypes).Query(x => x.Single(r => r.Name == "Medium Remote Armor Repairer II"));
But this does nothing as wel.
I want to get Items by name and then pass their HREF as a parameter to the following instead of the hardcoded url:
var theforge = crest.GetRoot().Query(r => r.Regions).Query(x => x.Single(r => r.Name == "The Forge")); var orders = theforge.Query(r => r.MarketBuyOrders, "type", "https://public-crest.eveonline.com/types/20414/");
Thanks in advance!
What do you mean by does nothing? Is the list empty, or does the method never return ?
|

Laura Shimaya
Companion Cube Corp.
0
|
Posted - 2016.03.19 22:08:21 -
[352] - Quote
Yes, the follwing method calls never return:
crest.GetRoot().Query(x => x.ItemTypes).Query(x => x.Single(r => r.Name == "Medium Remote Armor Repairer II")) crest.GetRoot().Query(x => x.ItemTypes).AllItems(); crest.GetRoot().Query(x => x.MarketTypes).AllItems();
Update:
Even if the ItemType is in the first page of https://public-crest.eveonline.com/types/ the method call does not return.
Example:
crest.GetRoot().Query(x => x.ItemTypes).Query(x => x.Single(r => r.Name == "720mm Howitzer Artillery I"));
Update 2:
This works because the ItemType is on the first Crest page and thereby in the "Items" collection:
crest.GetRoot().Query(r => r.MarketTypes).Items.Single(i => i.Type.Name == "720mm Howitzer Artillery I");
This gives an exception (InvalidOperationException) because the ItemType is not on the first page:
crest.GetRoot().Query(r => r.MarketTypes).Items.Single(i => i.Type.Name == "Medium Remote Armor Repairer II"); |

Laura Shimaya
Companion Cube Corp.
0
|
Posted - 2016.03.20 02:22:58 -
[353] - Quote
Found another problem:
EveCrest crest = new EveCrest();
var root = crest.GetRoot(); var regions = root.Query(r => r.Regions).Items;
foreach(var re in regions) { Console.WriteLine(re.Href); var reg = crest.Load(re); }
After iterating over 0 - 9 regions the Load method never returns.
Output in Visual Studio:
Quote:EveLib Verbose: 0 : JsonSerializer.Deserialize:Start EveLib Verbose: 0 : JsonSerializer.Deserialize:Complete EveLib Verbose: 0 : EveLibFileCache.LoadAsync:Start EveLib Verbose: 0 : EveLibFileCache:CacheRegisterLookupUri: https://public-crest.eveonline.com/regions/11000007/?
EveLib Verbose: 0 : EveLibFileCache:CacheRegisterLookupHash: 9DD5315EC48497CB991B692B93CD4E701F82885E EveLib Verbose: 0 : EveLibFileCache:CacheRegisterHit: False EveLib Verbose: 0 : EveLibFileCache.LoadAsync:Complete EveLib Error: 0 : Initiating Request: https://public-crest.eveonline.com/regions/11000007/?
EveLib Information: 0 : Response status: OK, OK EveLib Verbose: 0 : From cache: False EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Start EveLib Verbose: 0 : EveLibFileCache:Uri: https://public-crest.eveonline.com/regions/11000007/?
EveLib Verbose: 0 : EveLibFileCache:Cache Expiry: 03/20/2016 03:20:06 EveLib Verbose: 0 : EveLibFileCache:Writing cache data to disk: https://public-crest.eveonline.com/regions/11000007/?
EveLib Verbose: 0 : EveLibFileCache:Writing cache register to disk EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Complete EveLib Verbose: 0 : JsonSerializer.Deserialize:Start EveLib Verbose: 0 : JsonSerializer.Deserialize:Complete EveLib Verbose: 0 : EveLibFileCache.LoadAsync:Start EveLib Verbose: 0 : EveLibFileCache:CacheRegisterLookupUri: https://public-crest.eveonline.com/regions/11000008/?
EveLib Verbose: 0 : EveLibFileCache:CacheRegisterLookupHash: 5568F356C3045BDEC492F47C36EFE87F1C116679 EveLib Verbose: 0 : EveLibFileCache:CacheRegisterHit: False EveLib Verbose: 0 : EveLibFileCache.LoadAsync:Complete EveLib Error: 0 : Initiating Request: https://public-crest.eveonline.com/regions/11000008/?
EveLib Information: 0 : Response status: OK, OK EveLib Verbose: 0 : From cache: False EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Start EveLib Verbose: 0 : EveLibFileCache:Uri: https://public-crest.eveonline.com/regions/11000008/?
EveLib Verbose: 0 : EveLibFileCache:Cache Expiry: 03/20/2016 03:20:06 EveLib Verbose: 0 : EveLibFileCache:Writing cache data to disk: https://public-crest.eveonline.com/regions/11000008/?
EveLib Verbose: 0 : EveLibFileCache:Writing cache register to disk The thread 0x2788 has exited with code 259 (0x103). The thread 0x1be8 has exited with code 259 (0x103). The thread 0x16e0 has exited with code 259 (0x103). The thread 0x2dcc has exited with code 259 (0x103). The thread 0x2cb4 has exited with code 259 (0x103).
So it seems that it tries to write something to the cache file. After that all threads get terminated. Hope that helps! |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.20 09:47:23 -
[354] - Quote
Try updating to EveCrest v3.3.3 and let me know if you still have any issues. |

Icahmura Hasaki
Perkone Caldari State
22
|
Posted - 2016.03.20 09:51:58 -
[355] - Quote
Update 2:
This works because the ItemType is on the first Crest page and thereby in the "Items" collection:
crest.GetRoot().Query(r => r.MarketTypes).Items.Single(i => i.Type.Name == "720mm Howitzer Artillery I");
This gives an exception (InvalidOperationException) because the ItemType is not on the first page:
crest.GetRoot().Query(r => r.MarketTypes).Items.Single(i => i.Type.Name == "Medium Remote Armor Repairer II");[/quote]
This is intended, and is why AllItems() exists. I could overwrite Items but I would rather let users have the option to limit the linq query to the current page if they wish to do so. |

Laura Shimaya
Companion Cube Corp.
0
|
Posted - 2016.03.20 14:49:12 -
[356] - Quote
I updated EveCrest to V3.3.3.0 via NuGet.
It seems that nothing changed. The following calls still timeout / never return:
crest.GetRoot().Query(x => x.ItemTypes).AllItems();
Quote:EveLib Error: 0 : Initiating Request: https://public-crest.eveonline.com/types/?page=3&
EveLib Information: 0 : Response status: OK, OK EveLib Verbose: 0 : From cache: False EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Start EveLib Verbose: 0 : EveLibFileCache:Uri: https://public-crest.eveonline.com/types/?page=3&
EveLib Verbose: 0 : EveLibFileCache:Cache Expiry: 03/20/2016 15:40:36 EveLib Verbose: 0 : EveLibFileCache:Writing cache data to disk: https://public-crest.eveonline.com/types/?page=3&
EveLib Verbose: 0 : EveLibFileCache:Writing cache register to disk The thread 0x1710 has exited with code 259 (0x103). The thread 0xdc4 has exited with code 259 (0x103). The thread 0x1008 has exited with code 259 (0x103). The thread 0x12e0 has exited with code 259 (0x103). The thread 0x17e8 has exited with code 259 (0x103). The thread 0xb0 has exited with code 259 (0x103).
crest.GetRoot().Query(x => x.MarketTypes).AllItems();
Quote:EveLib Error: 0 : Initiating Request: https://public-crest.eveonline.com/market/types/?page=3&
EveLib Information: 0 : Response status: OK, OK EveLib Verbose: 0 : From cache: False EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Start EveLib Verbose: 0 : EveLibFileCache:Uri: https://public-crest.eveonline.com/market/types/?page=3&
EveLib Verbose: 0 : EveLibFileCache:Cache Expiry: 03/20/2016 14:47:16 EveLib Verbose: 0 : EveLibFileCache:Writing cache data to disk: https://public-crest.eveonline.com/market/types/?page=3&
EveLib Verbose: 0 : EveLibFileCache:Writing cache register to disk The thread 0x14b4 has exited with code 259 (0x103). The thread 0x1a8 has exited with code 259 (0x103). The thread 0x160c has exited with code 259 (0x103). The thread 0x1008 has exited with code 259 (0x103). The thread 0x12e0 has exited with code 259 (0x103). The thread 0x126c has exited with code 259 (0x103). The thread 0xc60 has exited with code 259 (0x103).
This gives me between 3 to 5 regions:
EveCrest crest = new EveCrest();
var root = crest.GetRoot(); var regions = root.Query(r => r.Regions).Items;
foreach(var re in regions) { Console.WriteLine(re.Href); var reg = crest.Load(re); }
Quote:EveLib Error: 0 : Initiating Request: https://public-crest.eveonline.com/regions/10000019/?
EveLib Information: 0 : Response status: OK, OK EveLib Verbose: 0 : From cache: False EveLib Verbose: 0 : EveLibFileCache.StoreAsync:Start EveLib Verbose: 0 : EveLibFileCache:Uri: https://public-crest.eveonline.com/regions/10000019/?
EveLib Verbose: 0 : EveLibFileCache:Cache Expiry: 03/20/2016 15:44:04 EveLib Verbose: 0 : EveLibFileCache:Writing cache data to disk: https://public-crest.eveonline.com/regions/10000019/?
EveLib Verbose: 0 : EveLibFileCache:Writing cache register to disk The thread 0xa5c has exited with code 259 (0x103). The thread 0xbec has exited with code 259 (0x103). The thread 0x468 has exited with code 259 (0x103). The thread 0xc4 has exited with code 259 (0x103). The thread 0x6ec has exited with code 259 (0x103).
Quote: This is intended, and is why AllItems() exists. I could overwrite Items but I would rather let users have the option to limit the linq query to the current page if they wish to do so.
Yes, u guess the defference between Items and AllItems is pretty clear. The first one gives the results from the current Crest page the later should iterate over all pages.
This gives an error as "r" does not have a property "Items":
crest.GetRoot().Query(r => r.MarketTypes).Query(r => r.Items.Single(i => i.Type.Name == "Medium Remote Armor Repairer II"));
Thanks for your help! |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.21 09:25:30 -
[357] - Quote
Oh yes, the MarketTypes endpoint doesn't have the Items property. My point was, if you use Items enumeration within a Query() method, it will request all the pages in the collection, but if you just want to retrieve the full collection, you have to use AllItems().
My tests here are fine with the 3.3.3 version. You can disable the cache by setting the crest.RequestHandler.CacheLevel property, while I look for a solution. |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.21 18:18:01 -
[358] - Quote
If you are experiencing any issues with deadlocking, ie. methods never returns, please update to Core v3.0.5. |

Laura Shimaya
Companion Cube Corp.
0
|
Posted - 2016.03.21 18:47:40 -
[359] - Quote
Quote: If you are experiencing any issues with deadlocking, ie. methods never returns, please update to Core v3.0.5.
Core 3.0.5 fixed all of my problems! Tremendous work good sir!
Your caching mechanism is excenellent! Queries return nearly instantly even when iterating over all pages:
var item = crest.GetRoot().Query(x => x.ItemTypes).Query(x => x.Single(r => r.Name == "Light Neutron Blaster II"));
This query over 29 Crest pages takes around 1200 ms with a populated cache.
|

Paranid Warrier
Hedion University Amarr Empire
0
|
Posted - 2016.03.21 20:35:53 -
[360] - Quote
Hello, Thank you for your tremendous efforts on creating this .NET library !!! It is very useful. One question, when are you going o implement fetching Buy and Sell region orders ? I see that currently the maximum I can get is the URI of market orders.
Thanks ! |
|

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.22 22:27:29 -
[361] - Quote
Paranid Warrier wrote:Hello, Thank you for your tremendous efforts on creating this .NET library !!! It is very useful. One question, when are you going o implement fetching Buy and Sell region orders ? I see that currently the maximum I can get is the URI of market orders.
Thanks !
Orders are supported.
https://forums.eveonline.com/default.aspx?g=posts&m=6348742#post6348742
|

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.23 15:11:11 -
[362] - Quote
Some neat new features coming up.
All CollectionResource objects implement IEnumerable, which works with automatic pagination. That is, any operation defined on IEnumerable will work across all pages in the collection by default. The CollectionResource.Items property will still only hold the local items for the specific page the object represents.
The pagination logic is also improved, only loading the next page when required. LINQ queries will be smarter and can perform better if you pay attention to how you write them. Operations such as Where(), ToList() and Single() will still enumerate the complete collection, while First() will stop and return the first match it finds. Using First() on collections with many pages can provide huge performance benefits and decrease the amount of requests considerably.
This also makes the code slightly neater, and is backwards compatible. Previously, the Query() API let you omit the .Items property and would use automatic pagination to operate on all items in the collection. However, outside the Query() methods, you would have to get the Items property explicitly, and all operations were on the local items unless AllItems() were used.
Now, all operations on the collection object default to all items, adhering to general LINQ guidelines, and works similarly to ie. Entity Framework. The default implementation of ToList() and my ToListAsync() mostly replace AllItems() and AllItemsAsync(), with the exception that if Automatic Pagination is disabled, ToList() only returns the local list, while AllItems() always return the full collection.
Examples:
// Inside a Query statement, the API remains the same Quote: var alliances = _crest.GetRoot().Query(r => r.Alliances); var alliance = alliances.Query(r => r.First(a => a.ShortName == "MZR"));
The difference is that previously all the pages in the collection would be queried. Now we query one page at a time until we find a match, and return that.
// Outside a query statment
var alliances = _crest.GetRoot().Query(r => r.Alliances); var old = alliances.AllItems().First(a => a.ShortName == "MZR"); var now = alliances.First(a => a.ShortName == "MZR");
Now, operating directly on the Collection object is similar to operating on AllItems() previously, except we now have the smarter IEnumerable implementation. Using .Items is still the same as before, only operating on local items.
Another new feature is simpler query parameters. You no longer need to specify the parameter name, all tho that option remains. Resources that can be used as parameters are bound to a default parameter name, and you can pass the whole Entity object as a parameter.
Examples:
var itemLink = _crest.GetRoot().Query(r => r.ItemTypes).First(); var itemResource = crest.Load(itemLink); var region = _crest.GetRoot() .Query(r => r.Regions) .Query(r => r.Items.First()); var old = region.Query(r => r.MarketBuyOrders, "type", itemLink.Uri); var now = region.Query(r => r.MarketBuyOrders, itemLink); var now2 = region.Query(r => r.MarketBuyOrders, itemResource);
As you can see, this works with both a LinkedEntity object, and a CrestResource object. |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.23 18:27:03 -
[363] - Quote
Core, EveCrest and EveXml have been updated, as always let me know if there are any issues.
https://github.com/ezet/evelib/releases/tag/EveCrest_v3.4.0
https://github.com/ezet/evelib/releases/tag/Core_v3.0.6
https://github.com/ezet/evelib/releases/tag/EveXml_v3.0.7 |

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.03.23 21:15:22 -
[364] - Quote
Haven't updated in a while, but this version broke some stuff.
Today I went from... Core 3.0.3.0 to 3.0.5.0 EveCrest 3.2.4.0 to 3.3.3.0 EveXml 3.0.5.0 to 3.0.6.0 NewtonSoft.Json 8.0.2 to 8.0.3
Currently using .net 4.5.2 in case that has relevance.
This call now causes an exception but I am guessing it has to do with some of the updates shown above.
var sellordercollection = await toolbox.eveCrest.LoadAsync(region.MarketSellOrders, "type", item.type);
item.type = "https://public-crest.eveonline.com/types/27912/"
I get "Invalid URI: The URI scheme is not valid."
EDIT: Also the exception being thrown is 'System.UriFormatException'. I have a try catch but for AggregateException, which I though that you mentioned somewhere is how you throw exceptions from inside your library. |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.03.23 21:33:57 -
[365] - Quote
You should be on Core 3.0.6 and EveCrest 3.4.0. If you use async/await, you do not need to worry about AggregateException. Just catch exceptions as normal, those are only thrown if you're using the blocking (non async) methods.
I'll have a look at that right away, but it might already be fixed if you get the latest updates. |

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.03.23 23:16:59 -
[366] - Quote
So I updated to 3.0.6 core and 3.4.0 crest but still does not work. I can fall back to a previous version and it works.
I tried to copy the example that you had in earlier post but the line
var old = region.Query(r => r.MarketBuyOrders, "type", itemLink.Uri);
gives error that itemLink.Uri does not exist and had to change to itemLink.Href.Uri.
Also that code appears to look for MarketBuyOrders of type #System.
I am guessing that is just an example, but it does work. |

Hel O'Ween
Men On A Mission
156
|
Posted - 2016.03.24 16:56:52 -
[367] - Quote
Xiaou Bijoun wrote:So I updated to 3.0.6 core and 3.4.0 crest but still does not work. I can fall back to a previous version and it works.
I tried to copy the example that you had in earlier post but the line
var old = region.Query(r => r.MarketBuyOrders, "type", itemLink.Uri);
gives error that itemLink.Uri does not exist and had to change to itemLink.Href.Uri.
Also that code appears to look for MarketBuyOrders of type #System.
I am guessing that is just an example, but it does work.
Without knowing EveLib, my guess is that "type" in r.MarketBuyOrders, "type", itemLink.Uri) is meant to be replaced with the item's real typeID (from table invTypes), because #System has typeID 0, to which "type" would be converted if treated as a numeric value. I.e. the all to popular Tritanuim example has the typeID 34.
EVEWalletAware - an offline wallet manager.
|

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.03.24 20:48:13 -
[368] - Quote
The "type" is a named parameter that actually gets appended to the Uri used to access the market order endpoint.
Here is the console output of the actual command generated for a concussion bomb from Domain.
https://public-crest.eveonline.com/market/10000043/orders/sell/?type=https://public-crest.eveonline.com/types/27912/&
You can see the endpoint for sell orders from domain
https://public-crest.eveonline.com/market/10000043/orders/sell/
has a type parameter
?type=
which is set to the Concussion Bomb (Type.ID = 27912) endpoint's Uri
https://public-crest.eveonline.com/types/27912/&
Is the & at the end necessary? or an artifact of possibly adding more parameters?
|

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.04.21 17:08:25 -
[369] - Quote
Has this forum thread died out? I have been trying to post a question and it doesn't seem to be working.
EDIT: Okay it is working.
I am having an issue with the ZKillboard constructor.
It throws an exception.
"Field not found: 'eZet.EveLib.Core.Config.CacheFactory'."
It works in the evelib-master project in both the ZKillboard_Test and directly create my own ZKillboard object.
My project has many other libraries used including Newsoft.Json. Is it possible there is some conflict? I was wondering if it was using statements but it would not compile if the correct using statements were missing right?
My thought is to start a new project and only use the ZKillboard object to begin with to make sure it works, then start adding in other libraries until I can duplicate the problem.
Any other thoughts? |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.04.22 13:20:02 -
[370] - Quote
If the nuget version isnt working, but the master branch is, I suspect I just didnt update the nuget version correctly, so it's referring to an older version of Core, which causes that error. I'm 99% sure that's the reason, I'll have a look later. ZKillboard currently isn't able to parse all the data from the statistics endpoint they provide, I ran into some issues with parsing some of the more complex data.
About your previous question, the & at the end of the url isn't necessary. |
|

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.04.23 17:09:39 -
[371] - Quote
I've updated ZKillboard on nuget, please let me know if you still have any issues. |

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.04.27 19:38:42 -
[372] - Quote
That seems to have fixed the problem with creating a ZKillboard object.
Thanks again. |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.04.27 19:41:39 -
[373] - Quote
Xiaou Bijoun wrote:That seems to have fixed the problem with creating a ZKillboard object.
Thanks again.
I will be uploading a pre-release of zkb to nuget shortly with support for the stats endpoint if you're interested :) |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.04.27 19:50:39 -
[374] - Quote
Pre-release of ZKB with stats support available here, let me know if there are any issues :) https://www.nuget.org/packages/eZet.EveLib.ZKillboard/3.0.4-beta1 |

Icahmura Hasaki
Perkone Caldari State
24
|
Posted - 2016.04.29 17:38:35 -
[375] - Quote
New version of EveCrest: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.4.1
Added support for characterstats and fixed a recently introduced bug caused by a change on CCPs end.
Use crest.GetCharacterStats(id) to get stats. AggregateYears is a dictionary of ExpandoObjects as values, dynamically created at runtime. The propertynames match the json names, but are converted to PascalCase. |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.02 18:10:58 -
[376] - Quote
EveXml: https://www.nuget.org/packages/eZet.EveLib.EveXml/3.0.8
Access masks should no longer cause integer overflows. |

Xiaou Bijoun
X-Fleet Phantoms Care Factor
1
|
Posted - 2016.05.03 18:39:38 -
[377] - Quote
Have you or are you intending on implementing the latest changes in the Citadel release?
For example the orders endpoint CCP recently added to get all orders from a region?
"Along with the buy and sell market order resources there is a new resource that gives you the both the buy and sell orders."
Thank you
|

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.03 20:21:57 -
[378] - Quote
Looks like that there is a problem with the AllianceCollection. It is returning a conversion error. Looked like something about ID being Int64 but the generic collection is using the normal int (32).
I haven't had any issues with the direct conversion using the link to the alliance ID (that I am generating inside the code atm). But I probably haven't tested enough.
Let me know if you need something more specific and I will try to grab it when I get back home.
What is a signature?
|

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.03 21:23:18 -
[379] - Quote
I've seen the updates, there is quite a lot of them. I intend to add them, but not sure when I will have the time to do so at the moment.
I'll look into the AllianceCollection this weekend, I'll send you an evemail if I need more information.
I'm currently looking into converting the project to a new format, and with that I'll hopefully be able to add support for uwp/uap and other platforms. I'm also looking into creating a library for CREST using dynamic types exclusively, possibly utilizing the metadata provided by HEAD requests, which would require far less maintenance. So many ideas, and so little time.. |

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.03 23:22:11 -
[380] - Quote
CREST authentication looks broken too: - Under EveAuth_Tests, methods Authenticate and Refresh are returning error HTTP Error 400. (got the same in my application)
What is a signature?
|
|

Bree Butter
Imperial Shipment Amarr Empire
0
|
Posted - 2016.05.04 09:47:32 -
[381] - Quote
Hi,
First of all, thanks for this cool library, every part has so far been working great for me. I just have one problem when deploying to my webhosting. I keep getting this error:
Access to the path '\EveLib\EveXmlCache' is denied.
I've been looking through this thread and your github pages and I've tried to change the cachefolder through my web.config as suggested:
< add key="eveLib.AppData" value="EveLib" / >
But the path is still based out of the AppData, which I dont have access to.
Ive also tried to create a new instance of the cache like so:
EveLibFileCache cache = new EveLibFileCache(Server.MapPath("~") + "\\EveLib", "LocalCache");
But this does not seem to affect the EveXml method I call afterwards.
Is there any way to force the library to use the application folder for its cache?
Thanks for your time o/ |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.04 15:55:26 -
[382] - Quote
The cache config is a mess, on my TODO list. Try changing Config.AppData to the path you want, and remember to do so before creating your EveXml objects. |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.04 16:48:55 -
[383] - Quote
Brain Gehirn wrote:CREST authentication looks broken too: - Under EveAuth_Tests, methods Authenticate and Refresh are returning error HTTP Error 400. (got the same in my application) Edit: Alliance error was: error invalid literal for long() with base 10: '2?' Code: crest.GetRoot().Query(r => r.Alliances).Query(o => o.Where(alliance => alliance.Id == allianceId)).FirstOrDefault(); But since I have made a change to the AllianceCollection to be able to make this query, can be that. The change is: public sealed class AllianceCollection : CollectionResource<AllianceCollection, AllianceCollection.Alliance> If you have some better alternative, let me know.
Both the refresh and authenticate methods test fine here, granted you need to update the refresh token and authcode, as they are very old.
Regarding the AllianceCollection, what did you change exactly? Did you just rename AllianceCollection.AllianceData to AllianceCollection.Alliance, or ? Are you on the newest version of EveCrest and Core ?
In any case, your query should work without making any changes, and I just tested it here without errors. Also, you should place the predicates in your call to FirstOrDefault, so the method can return when it finds your alliance. As it is, it will always scan the whole collection because of your Where clause, which could result in 12 additional needless requests.
var alliance = crest.GetRoot().Query(r => r.Alliances).Query(list => list.FirstOrDefault(a => a.Id == allianceId));
edit: Send me an evemail if you still can't figure it out, we could chat somewhere to make it a bit easier |

Bree Butter
Imperial Shipment Amarr Empire
0
|
Posted - 2016.05.04 17:44:08 -
[384] - Quote
Icahmura Hasaki wrote:The cache config is a mess, on my TODO list. Try changing Config.AppData to the path you want, and remember to do so before creating your EveXml objects.
Hi, thanks for the quick response. I've tried to change the AppData, but it won't let me because it is readonly:
http://i.imgur.com/H9GTUPo.png |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.04 17:51:37 -
[385] - Quote
Bree Butter wrote:Icahmura Hasaki wrote:The cache config is a mess, on my TODO list. Try changing Config.AppData to the path you want, and remember to do so before creating your EveXml objects. Hi, thanks for the quick response. I've tried to change the AppData, but it won't let me because it is readonly: http://i.imgur.com/H9GTUPo.png
Which version of Core are you using? I suspect you might be using an older version?
|

Bree Butter
Imperial Shipment Amarr Empire
0
|
Posted - 2016.05.04 17:59:44 -
[386] - Quote
Ah yes, i had 3.0.2 (only downloaded it like yesterday, you work fast xD) now ive upgraded to 3.0.7 and appdata can be set now, now i just need to figure out why it says that it cant find the cachefactory field  |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.04 18:04:31 -
[387] - Quote
If you're referring to CachePath, it's been converted form a field to a property, so you would need to recompile. I can't imagine you should need to set that property tho, instead set AppData to where you want the cache folder to be created. |

Icahmura Hasaki
Perkone Caldari State
25
|
Posted - 2016.05.04 18:10:12 -
[388] - Quote
New version of EveCrest: https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.4.2
Notes: https://github.com/ezet/evelib/releases/tag/EveCrest_v3.4.2
Added support for the new combined MarketOrder resource, since that was a quick fix.
The other new endpoints might take a little longer. If anyone has specific requests for an endpoint they need, please let me know and I'll find some time :) |

Bree Butter
Imperial Shipment Amarr Empire
0
|
Posted - 2016.05.04 18:18:40 -
[389] - Quote
Ive gotten it to work, thanks! |

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.04 22:49:53 -
[390] - Quote
Your answer gave me a direction for now (my source was not using AllianceData just the old href thing). My visual studio wasn't updating things as I thought.
I will do my merge + tests again.
What is a signature?
|
|

Aio Kaze
Black Shell Industries
2
|
Posted - 2016.05.05 13:07:36 -
[391] - Quote
The LP store endpoint would be very useful as I've been wanting to put together an LP profit calculator and don't fancy entering thousands of LP/ISK/item requirements by hand. |

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.05 17:35:02 -
[392] - Quote
Aio Kaze wrote:The LP store endpoint would be very useful as I've been wanting to put together an LP profit calculator and don't fancy entering thousands of LP/ISK/item requirements by hand.
afaik there is no such endpoint
What is a signature?
|

Mr Mac
Dark Goliath
139
|
Posted - 2016.05.05 17:56:08 -
[393] - Quote
Brain Gehirn wrote:Aio Kaze wrote:The LP store endpoint would be very useful as I've been wanting to put together an LP profit calculator and don't fancy entering thousands of LP/ISK/item requirements by hand. afaik there is no such endpoint You can get LP store from test crest |

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.05 23:04:34 -
[394] - Quote
Awesome, just saw it. Btw its working in the TQ CREST too, not just test.
What is a signature?
|

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2016.05.11 22:49:23 -
[395] - Quote
Hi. I must admit, that your lib is a great work!
But... I'm getting a lot of "Safe handle has been closed" exceptions when using crest.
I'm using only one instance of EveCrest. When using crest.GetRoot().Query(r=>r.Regions), its like 5 of 6 times, when i get that exception. On market queries, i get it in about 1% of queries.
My code is: var allRegions = crest.GetRoot() .Query(r => r.Regions) .Query(r => r.Items) .OrderBy(item => Helpers.GetRegionOrder((int)item.Id));
Stack trace is: at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success) at System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success) at System.Security.Cryptography.Utils.HashData(SafeHashHandle hHash, Byte[] data, Int32 cbData, Int32 ibStart, Int32 cbSize) at System.Security.Cryptography.SHA1CryptoServiceProvider.HashCore(Byte[] rgb, Int32 ibStart, Int32 cbSize) at System.Security.Cryptography.HashAlgorithm.ComputeHash(Byte[] buffer) at eZet.EveLib.Core.Cache.EveLibFileCache.getHash(Uri uri) at eZet.EveLib.Core.Cache.EveLibFileCache.< StoreAsync >d__13.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at eZet.EveLib.EveCrestModule.RequestHandlers.CachedCrestRequestHandler.< GetAsync >d__53`1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at eZet.EveLib.EveCrestModule.EveCrest.< getAsync >d__121`1.MoveNext()
Do you think you can look into it, or give me a hint, what should i do to not get this exception? Thanks. |

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.12 12:30:22 -
[396] - Quote
I've updated Core, fixing a bug that would sometimes throw ObjectDisposedException when attempting to write the cache. https://www.nuget.org/packages/eZet.EveLib.Core/3.0.8
Developer of EveLib and EveAuthUtility
|

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.12 13:44:04 -
[397] - Quote
Added support for LP stores as requested, and also NpcCorporationCollection and Stations. https://www.nuget.org/packages/eZet.EveLib.EveCrest/3.4.3
Developer of EveLib and EveAuthUtility
|

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2016.05.13 13:04:28 -
[398] - Quote
Thx, now its working like expected.
I have one question though... are you planning on implementing some rate limit mechanizm instead of limiting concurrent requests with semaphore? |

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.13 14:11:16 -
[399] - Quote
Aeon Haginen wrote:Thx, now its working like expected. I have one question though... are you planning on implementing some rate limit mechanizm instead of limiting concurrent requests with semaphore?
No plans, no. Why, is it causing any problems ?
Developer of EveLib and EveAuthUtility
|

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2016.05.13 14:51:20 -
[400] - Quote
Icahmura Hasaki wrote:Aeon Haginen wrote:Thx, now its working like expected. I have one question though... are you planning on implementing some rate limit mechanizm instead of limiting concurrent requests with semaphore? No plans, no. Why, is it causing any problems ?
No, but when i'm doing parallel quering, i dont want end up being banned by CCP when i end up doing 100req/sec. It can happen wery offen, as lot of queries that im doing are parallel and are less than 100ms. (like for example detail information about regions.. 100 reqs, done mostly in about 1 or 2 sec). as those requests are done inside your lib, im not able to limit it. i was able to limit queries to your lib for 10q/sec, but i cant control how many real requests (excluding cache hits) are being made from your lib to crest. |
|

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.13 14:58:14 -
[401] - Quote
Aeon Haginen wrote:Icahmura Hasaki wrote:Aeon Haginen wrote:Thx, now its working like expected. I have one question though... are you planning on implementing some rate limit mechanizm instead of limiting concurrent requests with semaphore? No plans, no. Why, is it causing any problems ? No, but when i'm doing parallel quering, i dont want end up being banned by CCP when i end up doing 100req/sec. It can happen wery offen, as lot of queries that im doing are parallel and are less than 100ms. (like for example detail information about regions.. 100 reqs, done mostly in about 1 or 2 sec). as those requests are done inside your lib, im not able to limit it. i was able to limit queries to your lib for 10q/sec, but i cant control how many real requests (excluding cache hits) are being made from your lib to crest.
You can set the amount of concurrent requests you allow through EveCrest.RequestHandler.AuthedMaxConcurrentRequests. And as far as I know 100 req/sec is roughly what is allowed, which is why the default value is what it is.
Developer of EveLib and EveAuthUtility
|

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.13 15:00:13 -
[402] - Quote
What are you doing to work with parallel querys? I'm **** with parallel things and was having issues (mostly with the cache).
When I need to update market order information for like 100 products.. it takes like 25/30 seconds. I have tried the Parallel.ForEach but then got stuck with the cache issue. (last version gave me some errors but this new version is giving a lot more, so I just gave up on the parallel thing)
What is a signature?
|

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.13 15:16:53 -
[403] - Quote
Brain Gehirn wrote:What are you doing to work with parallel querys? I'm **** with parallel things and was having issues (mostly with the cache).
When I need to update market order information for like 100 products.. it takes like 25/30 seconds. I have tried the Parallel.ForEach but then got stuck with the cache issue. (last version gave me some errors but this new version is giving a lot more, so I just gave up on the parallel thing)
The library is built from the ground up using the task API and is how it should be used, ideally. There are async versions of all methods. Asynchronicity is not the same as parallelism, but in this case where most of the time is spent waiting for a response, parallelism doesn't make much sense.
With that said, what errors are you getting ?
Developer of EveLib and EveAuthUtility
|

Brain Gehirn
Reikoku Pandemic Legion
74
|
Posted - 2016.05.13 15:28:26 -
[404] - Quote
Yeah I need to update my skills as I have been falling a bit behind... haven't had time to read/learn about it yet.
Most of issues apeeared to be around cache files being used already. But as you said its probably due the **** implementation that I have made.
I will try to learn about it this weekend and will also try to adjust my code accordingly
What is a signature?
|

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.13 15:36:37 -
[405] - Quote
Brain Gehirn wrote:Yeah I need to update my skills as I have been falling a bit behind... haven't had time to read/learn about it yet.
Most of issues apeeared to be around cache files being used already. But as you said its probably due the **** implementation that I have made.
I will try to learn about it this weekend and will also try to adjust my code accordingly
If you give me some more code examples I'll have a look again. But, if you want better performance, use the async methods, that is, the methods that end with Async. Using these will take care of everything in regards to "parallelism", granted you will probably have to make some changes to your code. I could possibly help if you've got examples.
One would think the latest updates would help with your way of doing it though, as access to the cache is being controlled by locks now.
Developer of EveLib and EveAuthUtility
|

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2016.05.13 19:49:47 -
[406] - Quote
Icahmura Hasaki wrote:Aeon Haginen wrote:Icahmura Hasaki wrote:Aeon Haginen wrote:Thx, now its working like expected. I have one question though... are you planning on implementing some rate limit mechanizm instead of limiting concurrent requests with semaphore? No plans, no. Why, is it causing any problems ? No, but when i'm doing parallel quering, i dont want end up being banned by CCP when i end up doing 100req/sec. It can happen wery offen, as lot of queries that im doing are parallel and are less than 100ms. (like for example detail information about regions.. 100 reqs, done mostly in about 1 or 2 sec). as those requests are done inside your lib, im not able to limit it. i was able to limit queries to your lib for 10q/sec, but i cant control how many real requests (excluding cache hits) are being made from your lib to crest. You can set the amount of concurrent requests you allow through EveCrest.RequestHandler.AuthedMaxConcurrentRequests. And as far as I know 100 req/sec is roughly what is allowed, which is why the default value is what it is.
ah, they updated limits: General Rate Limit: 150 requests per second Burst Size: 400 Concurrent Connections: 20 (as i remember, there were 2 separate limits, one for authed and one for unauthed requests)
now my app works great. currently about 20 req/s. |

Icahmura Hasaki
Perkone Caldari State
29
|
Posted - 2016.05.14 14:18:03 -
[407] - Quote
A small project I've been working on lately to reduce the maintenance efforts required to keep up with crest changes, here's an attempt at a dynamic crest library for .net.
https://www.nuget.org/packages/eZet.EveLib.DynamicCrest
In many ways it's similar to the EveCrest library, at least syntactically, but also very different.
It currently supports GetAsync and PostAsync, Put and Delete are not implemented yet. GetAsync is equal to QueryAsync in EveCrest. The major difference is, all methods return Expando objects, which is a custom implementation of DynamicObject, which support late binding. This means it offers no static or compile time type checking, but also automatically supports every crest resource right out of the gate, and any changes will be reflected immediately.
Sample use:
var crest = new DynamicCrest(); var root = await crest.GetAsync(crest.Host); var alliance = await (await root.GetAsync(r => r.alliances)).GetAsync(a => a.First(o => o.id == 99000967));
As you can see, it's very similar to how EveCrest is used. It already supports automatic pagination when querying collections, and all the other good stuff. One difference is that the property names are now strictly camelCased, directly mirroring the json response. So what would be r.Alliances in EveCrest is now r.alliances.
Basic support for POST requests are also available:
public async Task AddWaypoint() { var character = await (await (await crest.GetAsync(crest.Host)).GetAsync(r => r.decode)).GetAsync(r => r.character); var system = (await(await crest.GetAsync(crest.Host)).GetAsync(r => r.systems)).First(); or //var system = new Resource(30000142, "http://crest.regner.dev/solarsystems/30000142/"); var wp = new AutopilotWaypoint(system); or //wp.SolarSystem = system; await crest.PostAsync(character["waypoints"].href, wp); }
If you need access to an endpoint that isn't yet supported in EveCrest, this can be used to access anything made available through crest. To find which properties are available, you can enumerate the Properties property on the Expando object, which provides an IDictionary[string, object] interface to all the properties.
Keep in mind that this is an early preview. In time I hope to have this replace EveCrest, since the amount of maintenance needed to keep up with CREST changes is a bit much.
Developer of EveLib and EveAuthUtility
|

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.05.27 16:53:13 -
[408] - Quote
Thanks for this tool, it's very helpful!
I've successfully used EveAuth to get my access and refresh tokens. Next, I create the EveCrest object using my refresh token and encoded key. All great up to this point.
However, when I run GetRoot() on the crest object in authenticated mode it doesn't seem to include anything extra for the scopes I authenticated with. Maybe this is working as expected and i'm just not understanding.
I after reading about RESTful practices, I assumed the root would return additional endpoints if an access token was used. Is this not the case? |

Icahmura Hasaki
Perkone Caldari State
30
|
Posted - 2016.05.28 15:24:06 -
[409] - Quote
Dread Griffin wrote:Thanks for this tool, it's very helpful!
I've successfully used EveAuth to get my access and refresh tokens. Next, I create the EveCrest object using my refresh token and encoded key. All great up to this point.
However, when I run GetRoot() on the crest object in authenticated mode it doesn't seem to include anything extra for the scopes I authenticated with. Maybe this is working as expected and i'm just not understanding.
I after reading about RESTful practices, I assumed the root would return additional endpoints if an access token was used. Is this not the case?
Root is the same, unauthorized requests will be denied upon performing the request.
Developer of EveLib and EveAuthUtility
|

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.05.30 05:56:06 -
[410] - Quote
Icahmura Hasaki wrote:Root is the same, unauthorized requests will be denied upon performing the request.
Ok, thanks for the reply. Then I guess I'm missing how I'm supposed to use EVELib to access endpoints requiring authentication. I thought we had to get the root and then navigate from there using querys and loads. |
|

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.05.31 08:28:11 -
[411] - Quote
Dread Griffin wrote:Icahmura Hasaki wrote:Root is the same, unauthorized requests will be denied upon performing the request. Ok, thanks for the reply. Then I guess I'm missing how I'm supposed to use EVELib to access endpoints requiring authentication. I thought we had to get the root and then navigate from there using querys and loads.
Well, they will only be denied if the request is unauthorized. If you authenticate with the SSO you should be good ? And yeah, you are supposed to go through the root. All I'm saying is the root doesn't change based on authentication, the authorization check is performed upon requesting an endpoint that requires authentication, the root is public.
Developer of EveLib and EveAuthUtility
|

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.06.01 18:50:46 -
[412] - Quote
In evelib/EveLib.EveCrest/Models/Resources/Region.cs there doesn't appear to be a datamember for 'marketOrdersAll'. I assume this means I can't use evelib to access bulk market orders yet?
Thanks in advance.
EDIT: I just read the post about the dynamic crest lib on the previous page. Maybe this will work instead. Still need to check it out. |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.02 06:02:39 -
[413] - Quote
Dread Griffin wrote:In evelib/EveLib.EveCrest/Models/Resources/Region.cs there doesn't appear to be a datamember for 'marketOrdersAll'. I assume this means I can't use evelib to access bulk market orders yet?
Thanks in advance.
EDIT: I just read the post about the dynamic crest lib on the previous page. Maybe this will work instead. Still need to check it out.
Oh, I thought "marketOrders" was the correct endpoint, and I hadn't even noticed "marketOrdersAll". I will try and fix this asap, but i'll probably be a week as I'm busy with exams. Funny how no one else has commented on this.
But yes, this is exactly why I made dynamic crest, because it allows you to query any endpoint and retrieve any resource without the need for updates.
Please let me know if you are having any issues with dynamic crest or need more examples of how to use it. GET requests should be easy to do.
Developer of EveLib and EveAuthUtility
|

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.06.02 06:22:42 -
[414] - Quote
Icahmura Hasaki wrote:Dread Griffin wrote:In evelib/EveLib.EveCrest/Models/Resources/Region.cs there doesn't appear to be a datamember for 'marketOrdersAll'. I assume this means I can't use evelib to access bulk market orders yet?
Thanks in advance.
EDIT: I just read the post about the dynamic crest lib on the previous page. Maybe this will work instead. Still need to check it out. Oh, I thought "marketOrders" was the correct endpoint, and I hadn't even noticed "marketOrdersAll". I will try and fix this asap, but i'll probably be a week as I'm busy with exams. Funny how no one else has commented on this. But yes, this is exactly why I made dynamic crest, because it allows you to query any endpoint and retrieve any resource without the need for updates. Please let me know if you are having any issues with dynamic crest or need more examples of how to use it. GET requests should be easy to do.
I've managed to get all the market orders in The Forge using this:var theForgeMarketOrders = await(await(await(await crest.GetAsync(crest.Host)) .GetAsync(r => r.regions)) .GetAsync(a => a.First(o => o.id == 10000002))) .GetAsync(r => r.marketOrdersAll); However, I'm fairly new to C# and LINQ and wasn't really sure how to work with the returned object. I think i managed to hammer it into a list of objects i made with this:foreach (var marketOrder in theForgeMarketOrders) { MarketOrder temp = new MarketOrder(); temp.buy = marketOrder.buy; temp.issued = marketOrder.issued; temp.price = marketOrder.price; temp.volume = marketOrder.volume; temp.duration = marketOrder.duration; temp.id = marketOrder.id; temp.minVolume = marketOrder.minVolume; temp.volumeEntered = marketOrder.volumeEntered; temp.range = marketOrder.range; temp.stationID = marketOrder.stationID; temp.type = marketOrder.type; MarketOrders.Add(temp); }
I didn't have much time to work on it today, but I hope to hammer away some more tomorrow. |

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.06.02 19:40:38 -
[415] - Quote
It seems executing a foreach loop on your eZet.EveLib.DynamicCrest.Expando object works fine until the end when I get an exception for the object not containing a definition for 'next'. I've looked up ways to identify if an ExpandoObject contains a given method, but I don't think you can use them to control a foreach call.
I'm currently just catching and suppressing the exception and everything is going fine. I'm not sure if I need to be doing something different or if your object could end a foreach differently. |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.04 14:28:32 -
[416] - Quote
Thanks for the feedback so far, greatly appreciated. How you are creating the list is fine, and intended. I assume you have defined the MarketOrder class, it isnt the EveCrest one?
I'll look into the exception you mentioned, that's not intended.
So far it looks like you've got it working, let me know if you have other issues! :)
Developer of EveLib and EveAuthUtility
|

Dread Griffin
Blueprint Haus Blades of Grass
0
|
Posted - 2016.06.05 22:08:11 -
[417] - Quote
Icahmura Hasaki wrote:Thanks for the feedback so far, greatly appreciated. How you are creating the list is fine, and intended. I assume you have defined the MarketOrder class, it isnt the EveCrest one?
I'll look into the exception you mentioned, that's not intended.
So far it looks like you've got it working, let me know if you have other issues! :)
Yes, I created that market order class. Everything seems to be working fine so far. |

Tommy Tripod
Shady Castle AddictClan
0
|
Posted - 2016.06.11 22:13:59 -
[418] - Quote
Hi, I've been trying to access my fleet through EveCrest, but sofar I have not been able to find it. Am I looking in the wrong place or has that not been added to the library yet? |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.13 07:30:24 -
[419] - Quote
Tommy Tripod wrote:Hi, I've been trying to access my fleet through EveCrest, but sofar I have not been able to find it. Am I looking in the wrong place or has that not been added to the library yet?
Fleet endpoints are not supported yet, sorry.
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.14 12:22:26 -
[420] - Quote
Hello,
Since today's changes, API is broken, server status or something like this. |
|

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.14 16:44:34 -
[421] - Quote
With all the breaking changes to CREST, I will probably not be actively developing or supporting EveCrest anymore, it's simply too time consuming to keep up with all the changes.
I will focus on DynamiCrest, and my first priority is to add support for PUT and DELETE requests. If you are currently using GET and POST requests, I would suggest you replace EveCrest with DynamiCrest. The syntax and feature set is almost identical, and it's a lot more future proof.
As always, if anyone is having issues or need help in general, I'm more than happy to help. I expect to be able to put some work in towards DynamiCrest over the next couple of weeks.
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.14 17:49:13 -
[422] - Quote
Icahmura Hasaki wrote:With all the breaking changes to CREST, I will probably not be actively developing or supporting EveCrest anymore, it's simply too time consuming to keep up with all the changes.
I will focus on DynamiCrest, and my first priority is to add support for PUT and DELETE requests. If you are currently using GET and POST requests, I would suggest you replace EveCrest with DynamiCrest. The syntax and feature set is almost identical, and it's a lot more future proof.
As always, if anyone is having issues or need help in general, I'm more than happy to help. I expect to be able to put some work in towards DynamiCrest over the next couple of weeks.
Will give Dynamic version a try then.
Can you explain in a few words what are the main differencies between regular and dynamic version ? I mean why "dynamic" for example ? |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.14 18:11:43 -
[423] - Quote
https://forums.eveonline.com/default.aspx?g=posts&m=6487983#post6487983
https://blogs.msdn.microsoft.com/csharpfaq/2009/09/30/dynamic-in-c-4-0-introducing-the-expandoobject/
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.14 21:47:21 -
[424] - Quote
Dread Griffin wrote:It seems executing a foreach loop on your eZet.EveLib.DynamicCrest.Expando object works fine until the end when I get an exception for the object not containing a definition for 'next'. I've looked up ways to identify if an ExpandoObject contains a given method, but I don't think you can use them to control a foreach call.
I'm currently just catching and suppressing the exception and everything is going fine. I'm not sure if I need to be doing something different or if your object could end a foreach differently.
Yep, having the same error for every kind of resource, easy to avoid btw.
So far, I really like this dynamic version, easier to use imho.
Nice work. |

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.18 14:04:16 -
[425] - Quote
I have a small problem but kinda blocking : how can we get for example market history for a said item in a said region ?
I mean I can get every orders (thanx to "orderAll") but the same question would apply if I only want to get Jita orders for Tritanium (usual example).
Let's say we have something like this (several steps just to step in with debugger) :
var regionId = 10000002; var typeId = 34;
var crest = new DynamicCrest();
var root = await crest.GetAsync(crest.Host); var regions = await root.GetAsync(r => r.regions); var tmpRegion = await regions.GetAsync(a => a.FirstOrDefault(o => o.id == regionId));
//here it fails since it needs typeId somehow... var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory);
Can someone give me an example of the correct syntax to do this ?
Regards |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.18 14:46:54 -
[426] - Quote
See if this works:
var itemUrl = "https://crest-tq.eveonline.com/types/589/"; var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory, "type", itemUrl);
Obviously you don't want to hardcode the url like that for production code, but rather find the item url through CREST. Let me know if it works, if not I'll try to find the time to fix it. This is how it's done in EveCrest, I can't remember if I implemented it in DynamiCrest.
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.18 14:49:34 -
[427] - Quote
Icahmura Hasaki wrote:See if this works: var itemUrl = "https://crest-tq.eveonline.com/types/589/"; var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory, "type", itemUrl);
Obviously you don't want to hardcore the url like that for production code, but rather find the item url through CREST. Let me know if it works, if not I'll try to find the time to fix it. This is how it's done in EveCrest, I can't remember if I implemented it in DynamiCrest.
Thank you for reply,
Already tried this way but "GetAsync" only takes 1 argument, not 3, maybe I should use a List for arguments ?
I don't mind using direct URL like this, I can build it with SDE info or grab it from CREST, not a big deal. |

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.18 14:53:18 -
[428] - Quote
Mathliney Kagrel wrote:Icahmura Hasaki wrote:See if this works: var itemUrl = "https://crest-tq.eveonline.com/types/589/"; var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory, "type", itemUrl);
Obviously you don't want to hardcore the url like that for production code, but rather find the item url through CREST. Let me know if it works, if not I'll try to find the time to fix it. This is how it's done in EveCrest, I can't remember if I implemented it in DynamiCrest. Thank you for reply, Already tried this way but "GetAsync" only takes 2 arguments, not 3, maybe I should use a List for arguments ? I don't mind using direct URL like this, I can build it with SDE info or grab it from CREST, not a big deal.
What is the expected type if the second argument? I don't have access to the code here and it's been a while since I worked on it last. In any case, parameters probably aren't supported then. I'll see if I can fix that this week.
edit: Oh, actually, you can append "?type=https://crest-tq.eveonline.com/inventory/types/18/" to tmpRegion.marketHistory.Url or Href or whatever property has the url, and then perform the query, that should work. It's a bit of a hack, but you should be able to get it working, and it shouldnt cause any issues with future releases.
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.18 15:03:44 -
[429] - Quote
Icahmura Hasaki wrote:Mathliney Kagrel wrote:Icahmura Hasaki wrote:See if this works: var itemUrl = "https://crest-tq.eveonline.com/types/589/"; var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory, "type", itemUrl);
Obviously you don't want to hardcore the url like that for production code, but rather find the item url through CREST. Let me know if it works, if not I'll try to find the time to fix it. This is how it's done in EveCrest, I can't remember if I implemented it in DynamiCrest. Thank you for reply, Already tried this way but "GetAsync" only takes 2 arguments, not 3, maybe I should use a List for arguments ? I don't mind using direct URL like this, I can build it with SDE info or grab it from CREST, not a big deal. What is the expected type if the second argument? I don't have access to the code here and it's been a while since I worked on it last. In any case, parameters probably aren't supported then. I'll see if I can fix that this week. edit: Oh, actually, you can append "?type=https://crest-tq.eveonline.com/inventory/types/18/" to tmpRegion.marketHistory.Url or Href or whatever property has the url, and then perform the query, that should work. It's a bit of a hack, but you should be able to get it working, and it shouldnt cause any issues with future releases.
Will try to append url completin string.
Candidates are
Task"Expando" GetAsync(Func"dynamic,ExpandoObject")
and
Task"Expando" GetAsync(Func"List"dynamic",ExpandoObject")
Sorry for the "" but forum doesn't accept Greater and Lower than symbols... |

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.18 15:05:02 -
[430] - Quote
Icahmura Hasaki wrote:Mathliney Kagrel wrote:Icahmura Hasaki wrote:See if this works: var itemUrl = "https://crest-tq.eveonline.com/types/589/"; var tmpHistory = await tmpRegion.GetAsync(h => h.marketHistory, "type", itemUrl);
Obviously you don't want to hardcore the url like that for production code, but rather find the item url through CREST. Let me know if it works, if not I'll try to find the time to fix it. This is how it's done in EveCrest, I can't remember if I implemented it in DynamiCrest. Thank you for reply, Already tried this way but "GetAsync" only takes 2 arguments, not 3, maybe I should use a List for arguments ? I don't mind using direct URL like this, I can build it with SDE info or grab it from CREST, not a big deal. What is the expected type if the second argument? I don't have access to the code here and it's been a while since I worked on it last. In any case, parameters probably aren't supported then. I'll see if I can fix that this week. edit: Oh, actually, you can append "?type=https://crest-tq.eveonline.com/inventory/types/18/" to tmpRegion.marketHistory.Url or Href or whatever property has the url, and then perform the query, that should work. It's a bit of a hack, but you should be able to get it working, and it shouldnt cause any issues with future releases.
Btw, what is the simpliest way to request an url directly with this API ?
May be useful sometimes I think... |
|

Icahmura Hasaki
Perkone Caldari State
31
|
Posted - 2016.06.18 15:09:13 -
[431] - Quote
You are already doing that here:
var root = await crest.GetAsync(crest.Host);
You should be able to request any url using that :)
Developer of EveLib and EveAuthUtility
|

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.18 15:16:25 -
[432] - Quote
Icahmura Hasaki wrote:You are already doing that here: var root = await crest.GetAsync(crest.Host); You should be able to request any url using that :)
Yep, just figured :)
Will be handy for sure. |

Mathliney Kagrel
Too Many Miners
0
|
Posted - 2016.06.21 07:13:15 -
[433] - Quote
Dread Griffin wrote:It seems executing a foreach loop on your eZet.EveLib.DynamicCrest.Expando object works fine until the end when I get an exception for the object not containing a definition for 'next'. I've looked up ways to identify if an ExpandoObject contains a given method, but I don't think you can use them to control a foreach call.
I'm currently just catching and suppressing the exception and everything is going fine. I'm not sure if I need to be doing something different or if your object could end a foreach differently.
Beside try...catch you can also use foreach on the expando["items"] and then check for ["next"] to send a new request and treat ["items"] from reply, rince and repeat until ["next"] is null.
Not as convenient but :
1) won't raise exception 2) you can send all requests concurrently, would be faster
Icahmura is surely working on a fix anyway but sending several requests concurrently is a good thing anyway if you ask me. |

Xiaou Bijoun
The Society of Mutual Respect Care Factor
1
|
Posted - 2016.06.24 16:02:44 -
[434] - Quote
I know you are probably concentrating on dynamic crest right now but I have an issue with the xml api for GetPlanetaryPins, the times have no information in them and the QuantityPerCycle is always 0. Everything else is fine.
Thank you.
|

Ashley Traynor
Lazerhawks
0
|
Posted - 2016.07.27 22:37:44 -
[435] - Quote
So far I'm pulling my hair out over this. I'm a little new to vb so I might be doing something stupid but this is what i have here:
http://i.imgur.com/ClPkf5p.png
I think I can see why it doesn't work... but could someone help me at all? I'm just trying to use the eve API with XML to write to a Datatable which i can use to fill am ASP Gridview anddisplay corp history
|

White 0rchid
SniggWaffe WAFFLES.
10
|
Posted - 2016.08.02 17:33:18 -
[436] - Quote
Icahmura Hasaki wrote:Yeah, the cache folder is in the users Appdata folder on windows machines. This will be a lot easier to change in the next version, but I haven't gotten around to fix it yet. I'm still out for a few days so I won't be able to fix that quite yet unfortunately. You can try changing the cache path before creating the character object
Core.Config.CacheFactory = () => new EveLibFileCache(yourPath + "EveXmlCache", "register");
Or to change the cache on an existing object, set the cache directly
character.RequestHandler.Cache = new EveLibFileCache(yourPath + "EveXmlCache", "register");
It's not letting me do this for some reason. I can't figure out why these permissions dont work.
I'm writing an ASP MVC website and it keeps erroring on the cache, yet all my user accounts have access to AppData. |
|

CCP Phantom
C C P C C P Alliance
7347

|
Posted - 2016.12.19 13:28:45 -
[437] - Quote
Thread has been unlocked on request. Originally the thread was automatically locked by the forum software due to inactivity.
CCP Phantom - Senior Community Developer
|
|

Icahmura Hasaki
Perkone Caldari State
32
|
Posted - 2016.12.19 18:28:21 -
[438] - Quote
I've just updated most of the modules with bugfixes, which should resolve most of the bugs that have been introduced by new versions of the APIs and Eve Online.
Affected modules are: Core EveXml Crest EveCentral EveStaticData ZKillboard
There are probably some bugs still lingering, but I wanted to publish this update as soon as possible while I still have time. As always, report any bugs here or on github and I'll try to help you.
I do not intent to implement any new features for this library since there is a new API coming. I might finish post/put/delete operations for the dynamic crest library, if time permits.
I'm working on a .NET client for the ESI API, let me know if you're interested in testing it.
Developer of EveLib and EveAuthUtility
|

Zetsubou Gakusei
Pupper Appreciation Station White Stag Exit Bag
5
|
Posted - 2016.12.23 18:54:08 -
[439] - Quote
Thanks for updating the library, I recently got back into eve and now I'm again checking out development and I turned again to this lib.
I'm still trying to get the basics done, it's a bit hard though because there are no examples.
By the way what's the difference between the CREST and the Dynamic CREST library? |

Icahmura Hasaki
Perkone Caldari State
32
|
Posted - 2016.12.29 10:14:49 -
[440] - Quote
Zetsubou Gakusei wrote:Thanks for updating the library, I recently got back into eve and now I'm again checking out development and I turned again to this lib.
I'm still trying to get the basics done, it's a bit hard though because there are no examples.
By the way what's the difference between the CREST and the Dynamic CREST library?
I don't know the status of ESI yet (is it usable?) but if it works then I'm very interested in testing it out
There are examples here: https://github.com/ezet/evelib/wiki/Module:-EveCrest
https://github.com/ezet/evelib/blob/master/EveLib.Tests/EveCrest_Authed_Tests.cs
https://github.com/ezet/evelib/blob/master/EveLib.Tests/EveCrest_Public_Tests.cs
CREST uses typed classes for API data, while dynamic CREST uses dynamically created expando objects.
Developer of EveLib and EveAuthUtility
|
|

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2017.01.10 12:36:36 -
[441] - Quote
Icahmura Hasaki wrote:I'm working on a .NET client for the ESI API, let me know if you're interested in testing it.
It's not needed. You can auto generate .NET client using official swagger generator at "https://generator.swagger.io/". I've already created small (140 lines including usings and comments) C# program that can automatically download autogenerated .NET library for latest ESI version, extract it and update my sollution with it. Can share it if someone want. |

Zetsubou Gakusei
All-Out White Stag Exit Bag
5
|
Posted - 2017.01.10 12:49:03 -
[442] - Quote
Aeon Haginen wrote:Icahmura Hasaki wrote:I'm working on a .NET client for the ESI API, let me know if you're interested in testing it. It's not needed. You can auto generate .NET client using official swagger generator at "https://generator.swagger.io/". I've already created small (140 lines including usings and comments) C# program that can automatically download autogenerated .NET library for latest ESI version, extract it and update my sollution with it. Can share it if someone want.
Please do, I have almost no idea about how to do this stuff, right now I'm just calling ESI manually through restsharp (and it works only half the time) |

Aeon Haginen
Hogyoku Goonswarm Federation
0
|
Posted - 2017.01.10 13:48:11 -
[443] - Quote
okok, here it is: http://pastebin.com/0CX20Uy7 and http://pastebin.com/y3WiXGT7 (HttpContent.ReadAsFile).
to include autogenerated swagger client in your project, just create new folder "Swagger" (physical folder, not a project folder) and edit .csproj file: add: (Compile Include="Swagger\**\*.cs" /) into proper location: Project/ItemGroup/ where others (Compile)s are PS: I'm unable to write proper xml brackets, so I used () instead |

Icahmura Hasaki
Perkone Caldari State
32
|
Posted - 2017.01.13 16:50:55 -
[444] - Quote
Aeon Haginen wrote:Icahmura Hasaki wrote:I'm working on a .NET client for the ESI API, let me know if you're interested in testing it. It's not needed. You can auto generate .NET client using official swagger generator at "https://generator.swagger.io/". I've already created small (140 lines including usings and comments) C# program that can automatically download autogenerated .NET library for latest ESI version, extract it and update my sollution with it. Can share it if someone want.
Yes, I'm aware of that. I was working on templates to integrate SSO authentication, eg. EveAuth.
Developer of EveLib and EveAuthUtility
|

KenFlorian
Jednota Inc
43
|
Posted - 2017.04.07 16:06:21 -
[445] - Quote
Icahmura Hasaki wrote:
I'm working on a .NET client for the ESI API, let me know if you're interested in testing it.
I'm interested in working with the ESI implementation. |

Mixee
Real Enemy Academy SOLAR WING.
0
|
Posted - 2017.04.18 19:43:41 -
[446] - Quote
Hi,
Thanks for the library I found it very useful, I'd like to ask about some issues;
In EveLibFileCache.cs there's int variable _counter (which I'm guessing is there to throttle hitting the disk with IO writes), which gets compared to some magic number 10, meaning any less than 10 requests, or any requests that didn't fit into a multiple of 10 will not be listed in the "register" file when the program terminates, is that intended behaviour for a cache or is that a bug where the dictionary isn't flushed on termination?
I've hacked around the Core and Xml modules until they worked with .NET Core 1.1 and the (code) changes needed aren't too extensive; namely it's grabbing 5 nugets, replacing instances of WebClient with HttpClient and some minor changes e.g. getting rid of char.ToString(formatter) since it doesn't exist in corefx char api. I didn't tinker with the rest of the modules so I suppose I'm going into assumption here that there's not many changes needed.
So my question is; do you have any plans on supporting .NET core? If not would you consider merging patches to make it a bit easier to do so for people who need it? |

Icahmura Hasaki
Perkone Caldari State
33
|
Posted - 2017.05.09 11:21:44 -
[447] - Quote
I haven't looked at this library in a very long time, and currently don't have any plans of updating it. Maybe some time in the future. The ESI library has also been put on hold.
That could very well be a bug, feel free to submit fixes.
If you want to port it to core 1.1 I'd happily accept PRs, but I won't have time to update nuget until summer.
Developer of EveLib and EveAuthUtility
|
|
|
|
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .. 15 :: [one page] |