 			return nil
 		}
 
-		let contentHTML = itemDictionary["content_html"] as? String
-		let contentText = itemDictionary["content_text"] as? String
+		let contentHTML = itemDictionary[Key.contentHTML] as? String
+		let contentText = itemDictionary[Key.contentText] as? String
 		if contentHTML == nil && contentText == nil {
 			return nil
 		}
 		let decodedContentHTML = contentHTML?.rsparser_stringByDecodingHTMLEntities()
 
-		let url = itemDictionary["url"] as? String
-		let externalURL = itemDictionary["external_url"] as? String
-		let title = itemDictionary["title"] as? String
-		let summary = itemDictionary["summary"] as? String
-		let imageURL = itemDictionary["image"] as? String
-		let bannerImageURL = itemDictionary["banner_image"] as? String
-
-		let datePublished = parseDate(itemDictionary["date_published"] as? String)
-		let dateModified = parseDate(itemDictionary["date_modified"] as? String)
+		let url = itemDictionary[Key.url] as? String
+		let externalURL = itemDictionary[Key.externalURL] as? String
+		let title = itemDictionary[Key.title] as? String
+		let summary = itemDictionary[Key.summary] as? String
+		let imageURL = itemDictionary[Key.image] as? String
+		let bannerImageURL = itemDictionary[Key.bannerImage] as? String
+
+		let datePublished = parseDate(itemDictionary[Key.datePublished] as? String)
+		let dateModified = parseDate(itemDictionary[Key.dateModified] as? String)
 
 		let authors = parseAuthors(itemDictionary)
 		var tags: Set<String>? = nil
-		if let tagsArray = itemDictionary["tags"] as? [String] {
+		if let tagsArray = itemDictionary[Key.tags] as? [String] {
 			tags = Set(tagsArray)
 		}
 		let attachments = parseAttachments(itemDictionary)


	static func parseUniqueID(_ itemDictionary: JSONDictionary) -> String? {

		if let uniqueID = itemDictionary["id"] as? String {
			return uniqueID // Spec says it must be a string
		}
		// Spec also says that if it’s a number, even though that’s incorrect, it should be coerced to a string.
		if let uniqueID = itemDictionary["id"] as? Int {
			return "\(uniqueID)"
		}
		if let uniqueID = itemDictionary["id"] as? Double {
			return "\(uniqueID)"
		}
		return nil


	static func parseAuthors(_ dictionary: JSONDictionary) -> Set<ParsedAuthor>? {

		guard let authorDictionary = dictionary[Key.author] as? JSONDictionary else {
			return nil
		}

		let name = authorDictionary[Key.name] as? String
		let url = authorDictionary[Key.url] as? String
		let avatar = authorDictionary[Key.avatar] as? String
		if name == nil && url == nil && avatar == nil {
			return nil
		}
