Has there ever been an effort to document the API by generating an OpenAPI spec? This would allow some automatic doc generation, help ensure the team putting out the API is keeping docs up to date, can generate client libraries in a bunch of languages, even have an interactive API explorer. Thoughts?
I have tried a few different ways, such as using tables, which is cumbersome, but this is simple and works pretty well. Can't take too much credit. Like most things these days looked it up using Google search and adapted what I found. Set up_http as a string of your API address to pull and you get back the data string of the endpoint which you can then interrogate for your required data. In theory the string returned is subject to a character limit but haven't hit that yet so will deal with it if and when. Public Function get_data_string(byref up_http as Sting) As String Dim xmlhttpSet xmlhttp = CreateObject("msxml2.xmlhttp.6.0") With xmlhttp .Open "get", up_http, False .send get_data_string = .responseTextEnd With Set xmlhttp = Nothing End Function
Tricky_Dicky May 1, 2018
This Request For Comments covers a new set of endpoints to provide information about team matches, and lists of matches particpated in by player and by club. Matches will be referenced by their internal numeric ID. This ID is guaranteed unique and unchanging, but our internal IDs may change format in the future and so a new ID may be provided at that time. For this reason it advisable to always access the match endpoint first by retrieving the URL from list of player's matches or club's matches endpoint.   /pub/match/{id} This is the data representation of the match itself. The data returned for players changes depending on the status of the match.   If the match is in its registration phase: { "name": string, "url": "URL", // the URL of the match on the website "rules": string, // game variant information (e.g., "chess960") "description": string, // description "start_time" : timestamp, //time of start or autostart, depending on settings "end_time": timestamp, "settings": { "rules": "chess", "time_class": "daily", "time_control": "1/86400", "min_team_players": 1, "min_required_games": 0, "autostart": false }, "status": string, // {finished|registration|in_progress}, "boards": integer, // number of boards "teams": [ "team1": { "@id": "URL", // API URL for the club profile "name": "string", // club name "score": score, "players": [ { "username": "username", "board": "url", // url of board "rating": 1355, //rating of player "timeout": 25, //timeout percentage "status": "basic", //status of user } ] }, "team2": { "@id": "URL", // API URL for the club profile "name": "string", // club name "score": score, "players": [ { "username": "username", "board": "url", // url of board "rating": 1355, //rating of player "timeout": 25, //timeout percentage "status": "closed:fair_play_violations", //status of user } ] } ] } In others phases of match (in progress, finished, closed): { "name": string, "url": "URL", // the URL of the match on the website "rules": string, // game variant information (e.g., "chess960") "description": string, // description "start_time" : timestamp, "end_time": timestamp, "settings": { "rules": "chess", "time_class": "daily", "time_control": "1/86400", "min_team_players": 1, "min_required_games": 0, "autostart": false }, "status": string, // {finished|registration|in_progress}, "boards": integer, // number of boards "teams": [ "team1": { "@id": "URL", // API URL for the club profile "name": "string", // club name "score": score, "players": [ { "username": "username", "board": "url", // url of board "played_as_white": "win",  "played_as_black": "lose", "stats": "url", //url to player's stats } ] }, "team2": { "@id": "URL", // API URL for the club profile "name": "string", // club name "score": score, "players": [ { "username": "username",  "board": "url", // url of board "stats": "url", //url to player's stats "played_as_white": "lose",  "played_as_black": "win", } ] } ] }     /pub/match/{id}/{board} This is the data representation of a single board in a match. Only in-progress or finished games will be included, so there may be one or two games in this list. { "board": board number, "games": [ { "white": { // details of the white-piece player: "username": "string", // the username "rating": 1492, // the player's rating at the start of the game "result": "string", // the player's result, if game's finished "@id": "string", // URL of this player's profile "team": "url" // url to club's profile }, "black": { // details of the black-piece player: "username": "string", // the username "rating": 1942, // the player's rating at the start of the game "result": "string", // the player's result, if game's finished "@id": "string", // URL of this player's profile "team": "url" // url to club's profile }, "url": "string", // URL of this game "fen": "string", // current FEN "pgn": "string", // final PGN, if game's finished "start_time": 1254438881, // timestamp of the game start (Daily Chess only) "end_time": 1254670734, // timestamp of the game end, if game's finished "time_control": "string", // PGN-compliant time control "time_class": "string", // time-per-move grouping, used for ratings "rules": "string" // game variant information (e.g., "chess960") } ], }   /pub/player/{username}/matches This is the list of player's matches, divided by "finished", "in_progress" and "registered": { "finished": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "club": "URL", // URL of player's club endpoint "results": [ "played_as_white": "win", //result of game played as white "played_as_black": "win" //result of game played as black ], "board": "URL", // URL of PubAPI match board endpoint } ], "in_progress": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "club": "URL", // URL of player's club endpoint "board": "URL", // URL of PubAPI match board endpoint } ], "registered": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "club": "URL", // URL of player's club endpoint } ] }}   /pub/club/{url}/matches This is the data representation of a clubs's matches, divided by "finished", "in_progress" and "registered": { "finished": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "opponent": "URL", // URL of opponent's club endpoint "result": "win", //result of match } ], "in_progress": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "opponent": "URL", // URL of opponent's club endpoint } ], "registered": [ /** List of matches */ { "name": "Name of match", "url": "URL", // URL of match on web site "@id": "URL", // URL of PubAPI match endpoint "opponent": "URL", // URL of opponent's club endpoint } ] }}       Does this endpoint get you what's needed for your goals, tools, and services? Are there related data we missed that are essential? If possible, please include specific examples of how you intend to use the data, especially if you request that we change this output in some way.
Since Python is such a popular, easy to use object-oriented language & many developers & amateur coders use it in their projects, it seems a good idea to have a separate topic for it. Whenever I need to carry out some operation that involves a lot of heavy-lifting of data, Python is usually my first port of call. Many of my posts on this site that involve a large number of links, are compiled using Python scripts that I've written. So I'd like this to be a place for sharing views on the language, ideas about projects & Q & A's for those facing problems in their coding: Everything from installation on your computer to starting up the Python shell, writing & editing scripts, through to debugging & more advanced concepts. I sense that some people may be a little nervous about installing Python in the first place, so I'll leave a few following posts reserved to give a step by step guide on installation & some how-to advice.
https://www.chess.com/news/view/published-data-api#pubapi-endpoint-club-matches "result": "win" // result of the match{win,lose} Draw? https://www.chess.com/news/view/published-data-api#pubapi-endpoint-player-matches "finished": [... "results": [ "played_as_white": "win", //result of game played as white "played_as_black": "win" //result of game played as black ], I'm not sure I want the results here. I think I'd rather have links to the games, as if I find a loss I'm going to want to know whether it was a loss on time or not, and if so what the date was. The date of the game(s) is/are more important than the date the match ended: if someone has two timeouts three days apart or eight timeouts over the same period it's probably the same incident. (Hospital visit, hurricane, didn't care, whatever.) As an admin it's useful to distinguish the players who are dropping games here and there relatively constantly, from those who drop a bunch at once. The former are more of a problem than the latter. https://www.chess.com/news/view/published-data-api#pubapi-endpoint-match-profile Link not quite right? Takes me to the top of the API page. "rules": string, // game variant information (e.g., "chess960") Would it not be more consistent to use "Variant" for this? That's what's used in the PGNs. If "rules" is consistent with other endpoints, keep it? I've been doing game selection post-download as discussed elsewhere and use "Event", "Variant" and "TimeControl" from the PGNs so far. Data format of match in its registration phase: "timeout": 25, //timeout percentage "status": "closed:fair_play_violations", //status of user I doubt we'll see closed accounts in registration phase, but if this information is being pulled up here along with timeout %, then I'd like to see it pulled up into in-progress and completed matches too. To calculate a TMCL (Team Match Chamionship League) result for a match in progress or completed but stil provisional, player status is needed, as penalties are applied to boards which have fair play closures. In general, why separate registration phase from the others? What is "end time" for match in registration phase? Auto-start or not and minimum and maximum number of boards are items I don't see. All those are useful to know. V3 provides via the web interface the uernames of the originating admins. Why leave them out? (If there's a good reason, OK ... as I can't think of a real need to get at that data programatically. But as a rule of thumb everything I can see (other than perhaps posts) for a match that I can see on the web I'd like to be able to get programatically.) Another missing item: has one or other team locked? Any attempt to balance boards or even report imbalance wants that one, as once a team has locked there's usully little time to work on it before having to lock and start. Data format in others phases of match (in progress, finished, closed): Finished vs. closed? I don't understand that. https://api.chess.com/pub/match/{ID}/{board} In the games list, result can be dug out of the PGN if the game is finished, but is it worth having without digging into the PGNs? 1-0, 0-1, 1/2-1/2, or *? If start time and end time are given, result might as well be in there too? I think it would be more ueful, but others may have uses for start time and end time that I don't. (Or haven't thought of yet.) Sorry those comments are a bit scrambled. I'm in recovery phase from a migraine (second in a week) so I merely hope it makes some sense. Fine writing is beyond me for the moment.
Hello everyone, I am new here. I was hoping that some of you could offer your insight. I am interested in learning to code, for a few reasons. One is to seriously change careers and the other is for personal fulfillment in my hobbies. I have even considered the idea of doing free lance work someday, but first things first. To let all of you understand what I know and better what I want to know, I will start off by stating that I fiddled around with a Texas Instruments computer as a kid. I learned some of it's basic functions like, go to, run, print, etc. I have also learned some things on CodeAcademy's website, using Python. I have never worked much with an IDE, interpreter or compiler. I am aware of concepts like source code and machine code, but don't know how to make use of them. I became frustrated on CodeAcademy when I realized I was going through the steps to program to create a tip calculator. One of my frustrations with learning that way is that it begins to feel like brute force memorization, without any practical application. I find necessity a better teacher than memorizing "useless" facts. All I took away from these experiences was that there is a set of words and symbols that have definitions and that they need to be put into a proper order, with the right punctuation, metaphorically speaking. I believe they call that syntax. I started learning the concept of things like variables or arrays. Where I struggled with this was understanding how these parts of the program would apply to what I ultimately would like to achieve. I find it difficult to picture where these parts would go into the lines of code or how all of the lines would be put into order. I get the impression, unlike writing a story, the order of the code isn't necessarily strictly relegated to one order. It is like in math, where 4x6 or 6x4 is basically the same thing. It ends up having the same value or function. I started doing some more research and I discovered that there are two types of languages, one imperative and the other declarative. I reached a state of confusion when realizing I had interest in a program both being able to describe what computation should be performed and how to compute it. I am really confused now as to what language or languages I should even try to learn or how I should try to learn them. I am not interested in sitting through classes or reading books that explain to me what I already know. I am looking to move forward, but I am not interested in trying to learn by brute force memorization. If it is helpful, I am interested in data analysis of chess related and mathematical nature and data storage and retrieval. Thanks for your time and sharing your thoughts
stephen_33 Apr 3, 2018
andreamorandini has said: 'Please be aware that now the Team Matches endpoint will show status of user also when the match is ongoing.' This team match in progress has no users status: https://api.chess.com/pub/match/854930 Is it a real bug or just is a matter of time in order to update all the database?
reynaldo1234567 Mar 30, 2018
Hi, What amount if any of a player's settings should be available via api.chess.com is debatable. I have had an enhancement request for one of my scripts which reports players who are eligible to sign up for a match (not already registered, not a member of both teams). On a member's profile page there is a "mail" icon if they accept PMs, generally. (It doesn't so far as I know go away if the member viewing the profile is blocked; you have to try to send a PM to learn that.) The "mail" icon also shows or doesn't in the "mouseover" popup present in many places on the site. So ... is there a way to get it via api.chess.com? I don't think there is. My best idea so far (but merely a suggestion) would be to add a "settings" section to the player profile endpoint and include in it publicly visible settings. Vacation status would likely be another useful one. Cheers!
Hi all, Compare: https://www.chess.com/member/dj_haubi with: https://api.chess.com/pub/player/dj_haubi (Thorsten's just an example; I'd use @erik but his username is all lowercase already.) I understand I think why restricting usernames to alphanumeric plus hyphen and underscore in ASCII is sensible, and forcing a single case simplifies a lot of searches I'm sure. What is lost is a way to get the member's own preference about capitalisation of their username, and some are a lot easier to handle in mixed case (remember and even type) than all lower case. As the website is pulling data from somewhere, is the player profile not using the same data source or is it modifying the data once fetched? In the particular instance of the player profile, I would like to see any mixed case the member used when joining, or chose during a name change. I'd prefer to see the mixed case names anytime I get names, I think, as for presentation purposes it might sometimes avoid a profile lookup to get the name "right". Except that currently I know of no way to get a username "right". Is there a method I've missed? If not, please consider this an enhancement request!
Hi, Once upon a time if I recall correctly, the club members endpoint returned URLs (URIs?) for each club member, but in the interest of reducing volume that was changed and only the member names are returned, and client code must construct a URL if the player profile is wanted. A similar change was not made in the club profile endpoint, which has admin names but provides the full URL instead. From the members endpoint: "username":"stoker68", From the club profile admin's list: "https://api.chess.com/pub/player/stoker68" I appreciate that it would be a breaking change to synchronise these but frankly I would like them to be the same. This came up when I wanted to exclude administrators (checking for overlap in team memberships which could cause multi-payer issues). I wish to exclude administrators because: There is some overlap to help the smaller teams out One admin (who probably won't read this) would be reluctant to leave (he does have a point about being a "disaster recovery" sort of backup) I can trust the admins not to play for multiple teams or else it's on their own heads anyway. I can't trust that the players participating in these competitions either know the rules or care about them; they want to play chess, and know most but not all of the laws of chess and that's good enough for them. It's a hobby after all for all but a very few of chess.com's members. I grant this is easy enough to deal with and I won't mind too much if it's left as-is, but it is an inconsistency and as much of a nuisance as it might be to change it now, it will only be harder later. I've seen in source code a 20 year old comment saying, "After X is implemented, this code can be removed". Uh-huh. Right. Cheers!
When at the source code I write the <span style=""> stuff and then only close it after <br /> tags, the span style stuff disappears and there is no formatting.Is this supposed to happen?Example:This is common stuff, but <span style="color: #ff0000;"><br />this should be red</span> stuff...
Hi, https://www.chess.com/news/view/published-data-api#pubapi-endpoint-country-players This is very clear that the cache is updated at most once per day. Indeed, for AU, I appear to trigger an update with a request >24 hours after my previous request. I strongly suspect I'm the only one using this endpoint for AU right now. (As I'm the "supplier of data" to people recruiting for Team Australia and city/state teams that's perhaps not surprising.) What is a mild nuisance is that my request must be made >24 hours after my previous one, or I don't trigger an update. If the maximum cache time were reduced to perhaps 23 hours (or even 23 hours 55 minutes) an automated job won't be chancing getting the old data at the end of the 24 hour cache period (already processed, presumably) and not getting new data until the day following. Plus some active users who are not online every day could slip through for a while if effectively new data is only seen every 48 hours. I hope: a) This makes sense (it's hard to explain clearly ) b) That reducing the cache to a bit below 24 hours is OK. Clearly for any country that is accessed my multiple people regularly there's no chance of unfortunate synchronisation, but for countries being accessed by one person it's a definite possibility. What I'd really like as my processing of the data is somewhat manual would be for the cache time to be dropped to 12 hours. Then I could do a day's run whenever I was ready as long as it was approximately a day after my previous run, and I'd get good (new) data.
The current score on the web page is different to the API probably due to different strategy on closed accounts. example https://www.chess.com/club/matches/791448 score is 337.5 v 323.5 https://api.chess.com/pub/match/791448 score is 314 v 307
Tricky_Dicky Mar 5, 2018
This bug occurs in matches with a Rating Max value declared during 'Registration' status. Example: https://api.chess.com/pub/match/873060 we got this: {"@id":"https://api.chess.com/pub/match/873060","name":"Warm-up Tournament R2 - Big Game Hunters vs Team Spain","url":"https://www.chess.com/club/matches/873060","start_time":1519923600,"status":"registration","boards":63,"settings":{"rules":"chess","time_class":"daily","time_control":"1/259200","min_team_players":1,"max_rating":1500,"min_required_games":0,"autostart":false},"teams":{"team1":{"@id":"https://api.chess.com/pub/club/big-game-hunters","name":"Big Game Hunters","url":"https://www.chess.com/club/big-game-hunters","score":0,"players":[{"username":"billforchess","rating":1330,"timeout_percent":0,"status":"premium"},{"username":"bsankar","rating":1345,"timeout_percent":0,"status":"premium"},{"username":"bufab","rating":1109,"timeout_percent":0,"status":"premium"}, ....................................................................................................................................................................... {"username":"lifin","timeout_percent":0,"status":"basic"} The user "lifin" has no rating data, probably because his rating is now above the Rating Max established for this match, but he is still in the list. The same happens to all players with ratings eventually out of limits. Have a nice day!
andreamorandini Mar 1, 2018
hi... i noticed that a team match score has updated on the website, but the JSON returned is still the old score. it seems there is some delay there, how long is it?
Montifeltro Feb 26, 2018
The start_time is missing from some matches. It is documented for all three match states: registration, in_progress and finished: "start_time" : timestamp, //manual or auto time start Example 1, registration state, Auto Start No, no end_time (correct) and no start_time (incorrect) https://www.chess.com/club/matches/black-stone/869846 https://api.chess.com/pub/match/869846 Example 2, finished state, Auto Start Yes, has end_time but not start_time: https://www.chess.com/club/matches/black-stone/719632 https://api.chess.com/pub/match/719632 Example 3, finished state, Auto Start Yes, has end_time but not start_time: https://www.chess.com/club/matches/black-stone/821492 https://api.chess.com/pub/match/821492 I can't spot a pattern: both old matches and new matches have the problem, but not all do. Of Black Stone's matches, 39 are missing their start_time and 198 have it present.
I'm seeing some club members show up in the "all_time" group or "monthly" whom I expected to be in "weekly". At first I put it down to caching (one had been away and returned ~24-36 hours ago) but this one is plain wrong. Documentation: https://www.chess.com/news/view/published-data-api#pubapi-endpoint-club-members Endpoint: https://api.chess.com/pub/club/asger-s-great-viking-warriors/members
Hi, I'm writing a report to figure out: a) Who in a team plays Chess960 b) Who of (a) hasn't signed up for a match c) What the last date a player in (a) played a Chess960 game, as some try it and don't like it d) ... and ratings plus W/L/D information of course! I have this oddity: @nomoneyhoney 2015 178W/41L/31D last_online: 2017-12-26 last game: 2018-01-23 The output is: Player, rating, W/L/D, last_online (from the player's profile) and the last 960 game (from stats). If the date of the last game is a few days after last_online I wouldn't worry: conditional moves, timeouts, etc. Let's look into it. https://api.chess.com/pub/player/nomoneyhoney {"avatar":"https://images.chesscomfiles.com/uploads/v1/user/19775150.1b79901c.200x200o.252b429ce6da.jpeg","player_id":19775150,"@id":"https://api.chess.com/pub/player/nomoneyhoney","name":"Gary Basanta","username":"nomoneyhoney","title":"FM","followers":635,"country":"https://api.chess.com/pub/country/CA","location":"Vancouver, British Columbia","last_online":1514254693,"joined":1416289221,"status":"premium"} 1514254693 is Tue Dec 26 02:18:13 2017 UTC. Matches my output, good. https://api.chess.com/pub/player/nomoneyhoney/stats {"chess_daily":{"last":{"rating":2107,"date":1506922623,"rd":132},"best":{"rating":2107,"date":1497835205,"game":"https://www.chess.com/daily/game/121937966"},"record":{"win":82,"loss":7,"draw":5,"time_per_move":36549,"timeout_percent":40}},"chess960_daily":{"last":{"rating":2015,"date":1516724409,"rd":77},"best":{"rating":2078,"date":1478254457,"game":"https://www.chess.com/daily/game/168462380"},"record":{"win":178,"loss":41,"draw":31,"time_per_move":36549,"timeout_percent":40}},"chess_rapid":{"last":{"rating":2007,"date":1497609919,"rd":141},"best":{"rating":2080,"date":1445576874,"game":"https://www.chess.com/live/game/1117461666"},"record":{"win":41,"loss":15,"draw":6}},"chess_bullet":{"last":{"rating":2402,"date":1508823356,"rd":27},"best":{"rating":2499,"date":1497611303,"game":"https://www.chess.com/live/game/2290885162"},"record":{"win":803,"loss":464,"draw":88}},"chess_blitz":{"last":{"rating":2425,"date":1508425414,"rd":49},"best":{"rating":2465,"date":1497862923,"game":"https://www.chess.com/live/game/1174895365"},"record":{"win":837,"loss":481,"draw":101}}} 1516724409 is Tue Jan 23 16:20:09 2018. My code is reporting the data I'm getting as JSON from api.chess.com, but those two values look quite odd. Now check the archives for @NoMoneyHoney (who appears to be on vacation) and the last 960 game he lost was a no vacation tourament game on 24 Jan 2018, which allowing for timezones fits the timestamps. Summary: no bug here, but stats can correctly report games ending quite some time after someone has been logged in if vacation is involved. A new tournament round started, the player is on vacation and not online, didn't notice, loses game(s) and stats is updated with a newer date than the last time the player was online. Puzzle solved. I am going to post this anyway (with a title without "bug" in it ) as this behaviour was counter-intuitive to me and may be to others.
Came across this today: https://api.chess.com/pub/player/baldemorski/games/archives {"archives":["https://api.chess.com/pub/player/baldemorski/games/2012/01","https://api.chess.com/pub/player/baldemorski/games/2012/02","https://api.chess.com/pub/player/baldemorski/games/2012/03","https://api.chess.com/pub/player/baldemorski/games/2012/04","https://api.chess.com/pub/player/baldemorski/games/2012/05","https://api.chess.com/pub/player/baldemorski/games/2012/06","https://api.chess.com/pub/player/baldemorski/games/2012/07","https://api.chess.com/pub/player/baldemorski/games/2012/08","https://api.chess.com/pub/player/baldemorski/games/2012/09","https://api.chess.com/pub/player/baldemorski/games/2012/10","https://api.chess.com/pub/player/baldemorski/games/2012/11","https://api.chess.com/pub/player/baldemorski/games/2012/12","https://api.chess.com/pub/player/baldemorski/games/2013/01","https://api.chess.com/pub/player/baldemorski/games/2013/02","https://api.chess.com/pub/player/baldemorski/games/2013/03","https://api.chess.com/pub/player/baldemorski/games/2013/04","https://api.chess.com/pub/player/baldemorski/games/2013/05","https://api.chess.com/pub/player/baldemorski/games/2013/06","https://api.chess.com/pub/player/baldemorski/games/2013/07","https://api.chess.com/pub/player/baldemorski/games/2013/08","https://api.chess.com/pub/player/baldemorski/games/2013/09","https://api.chess.com/pub/player/baldemorski/games/2013/10","https://api.chess.com/pub/player/baldemorski/games/2013/11","https://api.chess.com/pub/player/baldemorski/games/2013/12","https://api.chess.com/pub/player/baldemorski/games/2014/01","https://api.chess.com/pub/player/baldemorski/games/2014/02","https://api.chess.com/pub/player/baldemorski/games/2014/03","https://api.chess.com/pub/player/baldemorski/games/2014/04","https://api.chess.com/pub/player/baldemorski/games/2014/05","https://api.chess.com/pub/player/baldemorski/games/2014/06","https://api.chess.com/pub/player/baldemorski/games/2014/07","https://api.chess.com/pub/player/baldemorski/games/2014/08","https://api.chess.com/pub/player/baldemorski/games/2014/09","https://api.chess.com/pub/player/baldemorski/games/2014/10","https://api.chess.com/pub/player/baldemorski/games/2014/11","https://api.chess.com/pub/player/baldemorski/games/2014/12","https://api.chess.com/pub/player/baldemorski/games/2015/01","https://api.chess.com/pub/player/baldemorski/games/2015/02","https://api.chess.com/pub/player/baldemorski/games/2015/03","https://api.chess.com/pub/player/baldemorski/games/2015/04","https://api.chess.com/pub/player/baldemorski/games/2015/05","https://api.chess.com/pub/player/baldemorski/games/2015/06","https://api.chess.com/pub/player/baldemorski/games/2015/07","https://api.chess.com/pub/player/baldemorski/games/2015/08","https://api.chess.com/pub/player/baldemorski/games/2015/09","https://api.chess.com/pub/player/baldemorski/games/2015/10","https://api.chess.com/pub/player/baldemorski/games/2015/11","https://api.chess.com/pub/player/baldemorski/games/2015/12","https://api.chess.com/pub/player/baldemorski/games/2016/01","https://api.chess.com/pub/player/baldemorski/games/2016/02","https://api.chess.com/pub/player/baldemorski/games/2016/03","https://api.chess.com/pub/player/baldemorski/games/2016/04","https://api.chess.com/pub/player/baldemorski/games/2016/05","https://api.chess.com/pub/player/baldemorski/games/2016/06","https://api.chess.com/pub/player/baldemorski/games/2016/07","https://api.chess.com/pub/player/baldemorski/games/2016/08","https://api.chess.com/pub/player/baldemorski/games/2016/09","https://api.chess.com/pub/player/baldemorski/games/2016/10","https://api.chess.com/pub/player/baldemorski/games/2016/11","https://api.chess.com/pub/player/baldemorski/games/2016/12","https://api.chess.com/pub/player/baldemorski/games/2017/01","https://api.chess.com/pub/player/baldemorski/games/2017/02","https://api.chess.com/pub/player/baldemorski/games/2017/03","https://api.chess.com/pub/player/baldemorski/games/2017/04","https://api.chess.com/pub/player/baldemorski/games/2017/05","https://api.chess.com/pub/player/baldemorski/games/2017/06","https://api.chess.com/pub/player/baldemorski/games/2017/07","https://api.chess.com/pub/player/baldemorski/games/2017/08","https://api.chess.com/pub/player/baldemorski/games/2017/09","https://api.chess.com/pub/player/baldemorski/games/2017/10","https://api.chess.com/pub/player/baldemorski/games/2017/11","https://api.chess.com/pub/player/baldemorski/games/2017/12","https://api.chess.com/pub/player/baldemorski/games/2018/01","https://api.chess.com/pub/player/baldemorski/games/2018/02"]}https://api.chess.com/pub/player/baldemorski/games/2012/08 {"message":"Entity of type 'Chess\\WebBundle\\Entity\\LiveTournament' for IDs tournamentId(150740) was not found","code":0}My code received and reported a 404 error, inconsistent as it looks up the archives first and doesn't probe. I'm tempted to start with the current month and probe back, but the cross-check with what is supposed to be present and what is is probably useful. A missing arhive vs. a month a player didn't play a game can't be distinguished otherwise. This way they can be distinguished but I still can't get the games.
I have a game where a knight is placed on B8 and a knight is placed on E7, now the move in PGN says Nc6, how do I know which knight was moved? Shouldn't the PGN say "Nbc6" or something?