\n"; $ret .= <<"EOT"; EOT $ret .= "\n"; $ret .= "Latest $LJ::SITENAME Posts$LJ::SITEROOT/stats/latest.bmlLatest public posts at $LJ::SITENAME.\n"; # setup for security logging my %securities = ( public => 0, private => 0, friends => 0, custom => 0, ); # retrieve posts. my @postids; foreach my $p (@$recent) { $securities{$p->{security}}++; next unless $p->{security} eq 'public'; $p->{ditemid} = $p->{itemid}*256 + $p->{anum}; $p->{urn} = "urn:$LJ::DOMAIN:entry:$p->{journalu}{user}:$p->{ditemid}"; push @postids, [ $p->{clusterid}, $p->{journalu}{userid}, $p->{itemid} ]; } my $rawposts = LJ::get_posts_raw({memcache_only=>1}, @postids); my $rdftoc = "\n"; my $rdfitems = ""; foreach my $p (@$recent) { next unless $p->{security} eq 'public'; my $uj = $p->{'journalu'}; my $up = $p->{'journalp'}; my $id = "$uj->{userid}:$p->{itemid}"; my $props = $rawposts->{prop}{$id}; # we shouldn't expect every post to be in the memcache. next unless $rawposts->{text}{$id}; # skipping unknown8bit users sucks, but we can't load users here. next if $props->{unknown8bit}; $rdftoc .= " \n"; my $url = LJ::journal_base($uj) . "/$p->{ditemid}.html"; my ($subject, $body) = @{$rawposts->{text}{$id}}; $rdfitems .= "\n"; # first, the required RDF elements. # we use title to represent all the metadata in one string, # then dublin core for the data in pieces. $rdfitems .= "$up->{'user'}"; $rdfitems .= " (in $uj->{'user'})" if $uj->{userid} != $up->{userid}; $rdfitems .= ": " . LJ::exml($subject) if $subject; $rdfitems .= "\n"; $rdfitems .= "" . LJ::exml($body) . "\n"; $rdfitems .= "$_\n" foreach map { LJ::exml($_) } @{$p->{tags} || []}; $rdfitems .= "$url\n"; # use dc for the rest. $rdfitems .= "" . LJ::exml($subject) . "\n" if $subject; $rdfitems .= "" . LJ::exml($up->{name}) . " ($up->{user})\n"; $rdfitems .= "" . LJ::exml($uj->{user}) . "\n" if $uj->{userid} != $up->{userid}; $rdfitems .= "" . LJ::time_to_w3c($p->{timepost}) . "Z\n"; # and lj for the lj-specific data. my $mood = $props->{current_mood}; $mood ||= LJ::mood_name($props->{current_moodid}) if $props->{current_moodid}; my $moodid = " id='$props->{current_moodid}'" if $props->{current_moodid}; $rdfitems .= "" . LJ::exml($mood) . "\n" if $mood or $moodid; $rdfitems .= "" . LJ::exml($props->{current_music}) . "\n" if $props->{current_music}; $rdfitems .= "" . LJ::exml($props->{picture_keyword}) . "\n" if $props->{picture_keyword}; $rdfitems .= "\n"; } $rdftoc .= "\n"; $ret .= $rdftoc . $rdfitems; $ret .= "\n"; $ret .= <<"EOT"; EOT return BML::noparse($ret); } _code?>