content_text incorrectly takes precedence over content_html when parsing JSON Feed, making it impossible to get content_html if both exist.
|
if "content_text" in e: |
|
entry["content"] = c = FeedParserDict() |
|
c["value"] = e["content_text"] |
|
c["type"] = "text" |
|
elif "content_html" in e: |
|
entry["content"] = c = FeedParserDict() |
|
c["value"] = sanitize_html( |
|
e["content_html"], self.encoding, "application/json" |
|
) |
|
c["type"] = "html" |
According to https://www.jsonfeed.org/version/1.1/, content_text and content_html are completely equal.
content_html and content_text are each optional strings — but one or both must be present.
Note that it uses both content_text and content_html, which is completely valid. An app such as iTunes, for instance, might prefer to use content_text, while a feed reader might prefer content_html.
Thus, a better methodology to parse it may be adopting the Atom approach: making entries[i].content a dict array, i.e., [{"type": "text/plain", "value": "content"}, {"type": "text/html", "value": "<p>content</p>"}].
Such a change, admittedly, would break existing downstream projects using the develop branch. Hopefully, this won't be painful, considering JSON Feed support hasn't been released yet.
I am willing to make a PR to achieve this if you think this is feasible.
content_textincorrectly takes precedence overcontent_htmlwhen parsing JSON Feed, making it impossible to getcontent_htmlif both exist.feedparser/feedparser/parsers/json.py
Lines 88 to 97 in e432421
According to https://www.jsonfeed.org/version/1.1/,
content_textandcontent_htmlare completely equal.Thus, a better methodology to parse it may be adopting the Atom approach: making
entries[i].contenta dict array, i.e.,[{"type": "text/plain", "value": "content"}, {"type": "text/html", "value": "<p>content</p>"}].Such a change, admittedly, would break existing downstream projects using the
developbranch. Hopefully, this won't be painful, considering JSON Feed support hasn't been released yet.I am willing to make a PR to achieve this if you think this is feasible.