This page is a static snapshot of a page on Rickipedia. For the fully functional site, go to rickies.net.

API

23rd November 2022 at 4:24pm

Much of the data on Rickipedia is also available in a more machine-readable format, suitable for parsing and navigating with automated tools and even Shortcuts. Despite how fun, exciting, and dynamic Rickipedia is to use, it's actually an entirely static site, only changing when an update is pushed to GitHub Pages. As such, using the API is simple, with no authentication or tokens required, but also no support for parameterized requests or server-side processing.

Everything to do with the API can be found under https://rickies.net/api/v1, and all locations mentioned here are relative to that. So, for example, the Indexes section refers to /topic/index.json which can be found at the full url https://rickies.net/api/v1/topic/index.json.

For some simple examples of the API in action, check out these Shortcuts:

General information

/winners.json

Data about the current reigning champions and their various titles. It also includes a link to a correct image of Rickipedia's version of The Tricky.

{
  "annual": {
    "game-name": "2021 Annual Rickies",    
    "date": "2022-01-06",
    "winner": "Stephen",
    "social": "https://twitter.com/AnnualChairman",
    "title": "Annual Chairman"
  },
  "keynote": {
    "game-name": "2022 September Rickies",
    "date": "2022-09-07",
    "winner": "Federico",
    "social": "https://twitter.com/KeynoteChairman",
    "title": "Keynote Chairman"
  },
  "flexies": {
    "game-name": "2022 September Rickies",  
    "date": "2022-09-07",
    "winner": "Myke",
    "title": "Duke of Flexington",
    "social": ""
  },
  "the-tricky-image": "https://rickies.net/files/images/tricky/StephenFederico.png"
}

/charity.json

Data about the charitable donations made as a result of The Flexies. As with the game itself, the donation amount is in US dollars. Certain other sites may have slightly different data; Rickipedia only includes donations required by The Bill, not voluntary or peer-pressured donations.

[ 
  { 
    "game": "2020 September Rickies", 
    "donator": "Stephen", 
    "donation": 100, 
    "charity-name": "Fur Kids", 
    "charity-url": "https://furkids.org/"
  },
  // more donations...
]

/episodes.json

Data about each episode of Connected that has been noted in Rickipedia. This doesn't include every mention of The Rickies, but it does include every time The Bill was changed and, of course, every episode where a game is either started or ended. Note that sometimes amendments happen outside of a game, so the relevant-games array may be empty.

[
  {
    "episode": 123, 
    "permalink": "https://relay.fm/connected/123", 
    "relevant-games": ["2017 Annual Predictions"] 
  },
  // more episodes...
]

/billchanges.json

This is essentially Rickipedia's Bill changelog in JSON form. Each one should have copious information about what happened as well as relevant Overcast timestamp URLs, but it's all in a blob of HTML straight from the wiki page (sorry).

[ 
  { 
    "episode": 123, 
    "changes": "<p>The first \"predictions draft\", used \"round robin\" ordering in 3 rounds. <a href=\"https://overcast.fm/+FXx7nikbQ/26:58\" target=\"_blank\">Picks were not allowed to be too \"simple\"</a>, like \"Apple will release an iPhone\", they must be specific. Myke decides, apparently on the spot, that these predictions will be checked at the end of the year to pick a winner.</p>"
  },
  // more entries...
] 

/ineligible.json

The picks that each host is currently forbidden from reusing.

{ 
  "Stephen": [ 
    // An array of each pick that Stephen is currently forbidden from reusing. These will be the full contents of each Pick, as described in the Picks section below.
  ],
  "Myke": [ ], // the same thing, but for Myke
  "Federico": [ ] // ditto
}

Games

Game objects contain just about all the information to do with a particular game. The /game/ location contains an index.json file (see below), an all.json file containing an array of the full contents of every Game in one place, annual.json for the full contents of the Annual Games, keynote.json for the Keynote Games, and other.json for the Other Games, in addition to the individual object files as can be found in the index.

Game objects look like this:

{
  "name": "This game's name, in plain English. This is the title of the page on Rickipedia as well as the key used in index.json.",
  "game-type": "One of: Keynote Annual Other.",
  "date-picked": "The date this Game started (YYYY-MM-DD)",
  "date-graded": "The date this Game was graded (YYYY-MM-DD), or an empty string if it hasn't been graded yet.",

  // The main-game section is omitted if a Game only had "non-graded" Picks, for example The AirPower Game.
  "main-game": {
    "picks": [
      // The Picks made in this game, in the order they were made. See the documentation for Picks for more. These picks should either be Regular or Ricky.
    ],
    "coin-flips": [
      // The coin flips from this main game, if any. See the documentation for Coin Flips for more.
    ],
    // The scores section is omitted for a Game that hasn't been graded yet.
    "scores": [ 
        { 
          "host": "One of: Stephen Myke Federico", 
          "score": 42
        }, // and of course the other two hosts follow
      ],
    "winner": "One of: Stephen Myke Federico TBD"
  },

  // The the-flexies section is present if The Flexies were played. 
  "the-flexies": {
    "picks": [
      // The Picks made in this game, in the order they were made. See the documentation for Picks for more. These, of course, will all be Flexie picks.
    ],
    "coin-flips": [
      // The coin flips from this Flexies game, if any. See the documentation for Coin Flips for more.
    ],

    // Scores and charity donation information are omitted if this game hasn't been graded yet.
    "scores": [
      { 
        "host": "One of: Stephen Myke Federico", 
        // Note: A score for The Flexies should generally be expressed as a percentage, but I leave the division and rounding to you.
        "correct": 5, // The number of correct Flexies for this host
        "total": 7 // The total number of Flexies for this host.
      }, // and of course the other two hosts follow
    ],
    "charity-name": "The name of the charity that received a donation",
    "charity-url": "A URL for said charity",
    "donation": 1000, // The amount that was donated, in US dollars
    "donator": "One of: Stephen Myke Federico",
    // End of section that is only present for games that have been graded.
    "winner": "The winner of this Flexies, or TBD if it hasn't been graded yet."
  },

  // The nongraded section is omitted if a game had no "non-graded" picks.
  "nongraded": {
    "picks": [
        // The non-graded Picks made in this game, in the order they were made. See below for more about how Picks are structured.
    ],
    "winner": "A few of the Other Games consisted entirely of non-graded picks, and in those cases the winner will be listed here. For The AirPower Game, the winner was Nobody."
  },

  // Which episodes of Connected are related to this Game.
  "relevant-episodes":
  [
    {
      "title": "The podcast episode's title, e.g. Connected #208: It’s Ugly and I Want It",
      "url": "The show notes/permalink for this episode",
      "episode-number": 208 // Integer for which episode number this is, although you could get it from the other two fields fairly easily.
    }, // and more episodes...
  ]
}

Picks

A Pick object represents a single prediction. The /pick/ location contains an index.json file (see below), an all.json file containing an array of the full contents of every single pick in one place, and individual JSON files for each pick. Game objects also contain Picks in the same format.

A Pick, wherever it's found, looks like this:

{
  "text": "The text of the pick, although in a few cases it was too long for practical purposes and was instead continued into the notes. In these cases, the convention is to start the pick but use '...' at the end to indicate that it continues.",
  "notes": "Notes for the pick. This field will always be present, but may be an empty string. If not empty, it will be the same HTML that is found on the corresponding Rickipedia page for the notes section, and should always look something like <p><ul>...notes notes notes...</ul></p>. Anchor links to other Rickipedia pages will just be the 'fragment' portion of the URL (that's the bit after the # symbol), which can be resolved within the API using index.json, or prepended with 'rickies.net/' to get a permalink to the normal Rickipedia entry.",
  "game": "The name of the game that this pick belongs to, formatted in natural language e.g. 'The AirPower Game'. This can be resolved to an API location with index.json for the full data for that Game.",
  "type": "One of: Regular Ricky Flexie NonGraded. Note that it is 'Ricky', not 'Risky'; that wiki tag is the one place where I studiously stick to that joke.",
  "topics": ["An array of strings, indicating which topics this pick is about. The full list of possible topics is the same as on Rickipedia's Topics page.", "Actually, there are also two others relating to 'Ahead of Its Time' that aren't really topics but can be found here: 'Possible Vindication' to track wrong picks that could become ahead of their time, and 'Unvindicatable' to mark wrong picks that don't have a chance of becoming true."],
  "host": "The host that made this pick. One of: Stephen Myke Federico.",
  "pick-conditions": 0, // This integer indicates how many 'conditions' this pick was judged to have, as described in more detail on Rickipedia's "Success By Pick Complexity" page.

// All of the above fields should always be present. The remaining fields are optional.

  "score": -1, // The points earned for this pick. May be negative if points were lost, and may not be an integer, as a few partial points were awarded in the early days. Will not be present if this pick has not been graded yet.
  "ahead-by": 1337, // If this pick was "Ahead of Its Time", this field will give how far ahead it was, measured in days. In other words, how many days from the pick being graded as wrong to the pick eventually coming true. Should always be an integer.
  "overcast-picked": "A URL that jumps directly to this pick being made with Overcast's timestamp link feature. Not guaranteed to be present, although at the time of this writing every Pick did have one.",
  "overcast-graded": "A URL that jumps directly to this pick being graded in the episode using Overcast's timestamp link feature. This should almost always be present, except for any ungraded games and a handful of non-graded picks that apparently weren't interesting enough to talk about."
}

Topics

Rickipedia has classified all the picks by topic, most of which are Apple product lines or services. A few Topics are a little more meta or abstract, like Alternate Risky for picks that started life as a risky pick but were demoted for whatever reason, Buzzkill for picks that will disappoint a lot of people if they come true, Live Edited for picks that changed mid-show, and of course the duo of Passionate and No Passion as declared by the man of the people himself, Federico Viticci.

There is also Ahead of Its Time and two tags that are related to it: Possible Vindication for wrong picks that haven't come true yet but might someday, and Unvindicatable for those that are just wrong and either preposterously unlikely to come true or phrased in such a way that they really can't come true in any meaningful way. Those last two are really more for my own tracking of picks than anything else, so they don't appear in the list of Topics on Rickipedia, but they are included in the API. (They also make an appearance in the advanced search.)

As described above, each Pick has an array of its Topics included. To go in reverse, finding all picks pertaining to a given Topic, there is a /topic/index.json file (see below for more on index files) which will point you to locations for each individual Topic. The individual Topic locations each simply contain an array of the full contents of each Pick tagged with that Topic.

Coin flips

The statistical anomaly that is the Rickies coin flip is cataloged in extensive detail here on Rickipedia. They are indexed at /coinflip/index.json, and can also be found in their relevant Game object. /coinflip/all.json contains an array each of these objects if you want them all in one go.

A few coin flips were a bit unusual. The first ever coin flip to resolve a tie was done "best of 3" style and then this was never done again. (Nevertheless, the hosts still sometimes express confusion that it's really just 1 flip to break the tie.) To capture this data, each flip has its own entry, but the "winner" and "loser" fields are blank for all but the final one because until then, no one had really won or lost yet. Those flips will have empty strings for those fields.

The other odd one was the "knockout" flip at WWDC 2019. All three hosts picked heads or tails, and anyone wrong was out, so the loser field has "Myke and Federico" in it.

Coin flip objects look like this:

{
  "game": "The game that this coin flip was a part of, in plain English. This will also be the key used in indexes and the title field on the wiki.",
  "called": "What outcome was called before the flip. One of: Heads Tails",
  "caller": "Who got to make the call. One of: Stephen Myke Federico",
  "flip-method": "How the coin was flipped, e.g. Dice by PCalc",
  "game-phase": "Which part of the game this was part of. One of: Rickies Flexies",
  "loser": "Who lost this coin flip. Usually one of the hosts, but see above.",
  "overcast-link": "An Overcast timestamp link to the flip",
  "prize": 1, // Integer for what place was at stake. In other words, 1 if the flip was for the win, 2 if the flip was to take 2nd and avoid the loss.
  "result": "The actual result of the coin flip. Yes, we're only just getting to this now. One of: Heads Tails",
  "winner": "The winner of the coin flip. See above for caveats."
}

Indexes

If the client knows where its desired data can be found, retrieving it with a GET request is trivial (again, there's no authentication, these are really just files on a web server).

If not, there are a few index.json files that can help. These are structured as simple key-value pairs, like so:

{
  "2019 WWDC Predictions": "/game/15.json",
  "iPod Touch": "/topic/12.json",
  "Apple unveils a new high-end audio product": "/pick/296.json",
  "2020 Summer coin flip for the win": "/coinflip/5.json", 
  // etc.
}

Each key is the name of the Rickipedia article as it appears in English on the wiki. This corresponds with that item's 'title' field in TiddlyWiki parlance, and is guaranteed to be unique within the wiki. Links within the wiki will point to a URL fragment corresponding with this key, so for example if you are digging deeper into some HTML that the API gave you and want to find the JSON corresponding to a link like <a href="#HomePod%20price%20drop">, just URL decode that fragment and trim off the # symbol to get a key that can be used in these indexes.

The main index is at /index.json and contains every Game, Topic, Pick, and Coin Flip in the wiki. Within /game/, /topic/, /pick/, and /coinflip/ are index.json files that just contain entries for the object of that type. Also in each of those (except for topics) is an all.json file which contains an array of each of the relevant objects.