Hello!
I'm working on a Prosody module that will use XEP-0422: Message Fastening ( 
https://xmpp.org/extensions/xep-0422.html )
to attach URL previews to messages by fetching Open Graph Protocol <meta> 
elements from the URL pasted in the chat.
I would like to settle on a format that makes sense for XMPP so clients could 
easily understand these fastenings if they wanted to.

My ideal scenario would be to basically send the same elements as the ones 
described in https://opengraphprotocol.org/
so as a client developer one would have https://opengraphprotocol.org/ as the 
one and only source of truth and avoid
having some kind of translator between OGP and the XMPP format.

Using the example from https://opengraphprotocol.org/ a quick prototype could 
be something like:


1)
<message to='[email protected] mailto:to='[email protected] 
/converse.js-118260153' xmlns='jabber:client' from='[email protected] 
mailto:from='[email protected] '>
<apply-to xmlns='urn:xmpp:fasten:0' id='id7489c43f-976c-47a1-9fe1-6a18062b3f49'>
<meta xmlns='urn:xmpp:ogp:0' property='og:url' 
content='http://www.imdb.com/title/tt0117500/'/ >
<meta xmlns='urn:xmpp:ogp:0' property='og:image' 
content='https://m.media...jpg'/ >
<meta xmlns='urn:xmpp:ogp:0' property='og:type' content='video.movie'/>
<meta xmlns='urn:xmpp:ogp:0' property='og:title' content='The Rock (1996) - 
IMDb'/>
<meta xmlns='urn:xmpp:ogp:0' property='og:site_name' content='IMDb'/>
<meta xmlns='urn:xmpp:ogp:0' property='og:description' content='Directed by 
Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer...'/>
</apply-to>
</message>


This would be my current preferred way to go, so as a client developer, 
whenever I wanted to extend my client,
I would go to the OGP specification and include any new properties available.

The problem I see is possibly with the values of the property attribute. One 
could say the 'og:' prefix is redundant
or that it doesn't look "xmppish" to have an attribute value like 'og:title'

Maybe, would this make more sense if that's the issue?

2)
<message xmlns='jabber:client' from='[email protected] 
mailto:from='[email protected] ' to='[email protected] 
mailto:to='[email protected] /converse.js-118260153'>
<apply-to xmlns='urn:xmpp:fasten:0' id='id914a1083-4717-44a2-a1fa-a743a0e089c8'>
<meta xmlns='urn:xmpp:meta:0'>
<ogp property='site_name'>IMDb</ogp>
<ogp property='type'>video.movie</ogp>
<ogp property='title'>The Rock (1996) - IMDb</ogp>
<ogp property='url'>http://www.imdb.com/title/tt0117500/</ogp 
http://www.imdb.com/title/tt0117500/ >
<ogp property='description'>Directed by Michael Bay. With Sean Connery, Nicolas 
Cage, Ed Harris, John Spencer...</ogp>
<ogp property='image'>https://m.media...jpg</ogp https://m.media...jpg >
</meta>
</apply-to>
</message>

After scrolling down a bit, I stumbled upon some properties having related 
content in this form (notice the value of the property attribute):
<meta property="og:image:width" content="400" />

Then, should the format be something like this?

3)
<message xmlns='jabber:client' from='[email protected] 
mailto:from='[email protected] ' to='[email protected] 
mailto:to='[email protected] /converse.js-118260153'>
<apply-to xmlns='urn:xmpp:fasten:0' id='id914a1083-4717-44a2-a1fa-a743a0e089c8'>
<ogp xmlns='urn:xmpp:ogp:0'>
<site_name>IMDb</site_name>
<type>video.movie</type>
<title>The Rock (1996) - IMDb</title>
<url>http://www.imdb.com/title/tt0117500/</url 
http://www.imdb.com/title/tt0117500/ >
<description>Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed 
Harris, John Spencer...</description>
<image content='https://m.media...jpg' >
<width>400</width>
<height>300</height>
<alt>A shiny red apple with a bite taken out</alt>
<secure_url>https://secure.example.com/ogp.jpg</secure_url 
https://secure.example.com/ogp.jpg >
<type>image/jpeg</type>
</image>
</ogp>
</apply-to>
</message>

My initial thought is to stick with the first example I've mentioned and do 
something like:

// Stuff I support for my previews
PREVIEW = {
IMAGE = 'og:image',
DESCRIPTION = 'og:description',
TITLE = 'og:title',
}
.
.
.
apply_to = message.children(xmlns='urn:xmpp:fasten:0')
preview = Preview.new(to=apply_to.id)

for meta in apply_to.children()
switch(meta.property)
case PREVIEW.IMAGE:
preview.image = meta.content
case PREVIEW.DESCRIPTION:
preview.description = meta.content
case PREVIEW.TITLE:
preview.title = meta.content

preview.display()

What do you think? Has anyone already implemented such format or feature?
I would appreciate any feedback and suggestions, thank you! :)

PS: I know, I know. You are right, this is a client feature and all this is not 
needed, but it is useful in scenarios where as an operator
I want to avoid clients automatically visiting URLs without voluntary action, 
for example.


Kind regards,

Seve
https://delape.net
https://github.com/SeveFP
_______________________________________________
Standards mailing list
Info: https://mail.jabber.org/mailman/listinfo/standards
Unsubscribe: [email protected]
_______________________________________________

Reply via email to