I didn't really like the format of yesterday's Twitter dump so today I opened another can of XQuery ass-kicking to improve it. First, let's group by date:
xquery version "1.0";
declare namespace atom="http://www.w3.org/2005/Atom";
let $tweets := for $entry in reverse(document("/db/twitter/elharo")/atom:feed/atom:entry)
return
<div><date>{substring-before($entry/atom:updated/text(), "T")}</date> <p> <span>{substring-before(substring-after($entry/atom:updated/text(), "T"), "+")} UTC</span> {substring-after($entry/atom:title/text(), "elharo:")}</p></div>
return
for $date in distinct-values($tweets/date)
return <div><h3>{$date}</h3>
{
for $tweet in $tweets
where $tweet/date = $date
return $tweet/p
}</div>
Now let's hyperlink the URLs:
xquery version "1.0";
declare namespace atom="http://www.w3.org/2005/Atom";
let $tweets := for $entry in reverse(document("/db/twitter/elharo")/atom:feed/atom:entry)
return
<div><date>{substring-before($entry/atom:updated/text(), "T")}</date> <p> <span>{substring-before(substring-after($entry/atom:updated/text(), "T"), "+")} </span>
{replace(substring-after($entry/atom:title/text(), "elharo:"),
"(http://[^\s]+)",
"<a href='http://$1'>http://$1</a>")}</p></div>
return
for $date in distinct-values($tweets/date)
return <div><h3>{$date}</h3>
{
for $tweet in $tweets
where $tweet/date = $date
return $tweet/p
}</div>
Let's do the same for @names:
xquery version "1.0";
declare namespace atom="http://www.w3.org/2005/Atom";
let $tweets := for $entry in reverse(document("/db/twitter/elharo")/atom:feed/atom:entry)
return
<div><date>{substring-before($entry/atom:updated/text(), "T")}</date> <p> <span>{substring-before(substring-after($entry/atom:updated/text(), "T"), "+")} </span>
{
replace (
replace(substring-after($entry/atom:title/text(), "elharo:"),
"(http://[^\s]+)",
"<a href='$1'>$1</a>"),
" @([a-zA-Z]+)",
" <a href='http://twitter.com/$1'>@$1</a>"
)
}</p></div>
return
for $date in distinct-values($tweets/date)
return <div><h3>{$date}</h3>
{
for $tweet in $tweets
where $tweet/date = $date
return $tweet/p
}</div>
And one more time for hash tags:
xquery version "1.0";
declare namespace atom="http://www.w3.org/2005/Atom";
let $tweets := for $entry in reverse(document("/db/twitter/elharo")/atom:feed/atom:entry)
return
<div><date>{substring-before($entry/atom:updated/text(), "T")}</date> <p> <span>{substring-before(substring-after($entry/atom:updated/text(), "T"), "+")} </span>
{
replace (
replace (
replace(substring-after($entry/atom:title/text(), "elharo:"),
"(http://[^\s]+)",
"<a href='$1'>$1</a>"),
" @([a-zA-Z]+)",
" <a href='http://twitter.com/$1'>@$1</a>"
),
" #([a-zA-Z]+)",
" <a href='http://twitter.com/search?q=#$1'>#$1</a>"
)
}</p></div>
return
for $date in distinct-values($tweets/date)
return <div><h3>{$date}</h3>
{
for $tweet in $tweets
where $tweet/date = $date
return $tweet/p
}</div>
And here's the finished result.