representative-hcard-parsing

(Difference between revisions)

Jump to: navigation, search
m (Updated code ~ should be slightly faster since a document is less likely to have class="uid" than class="url")
(clarify steps in algorithm, group open source implementations, make PD clear/explicit on open source inline in the wiki)
Line 3: Line 3:
Assuming you are already using code that properly implements [[hcard-parsing]], this page documents how to determine a [[representative hCard]] for a page using the current [[representative-hcard-brainstorming]] proposal.
Assuming you are already using code that properly implements [[hcard-parsing]], this page documents how to determine a [[representative hCard]] for a page using the current [[representative-hcard-brainstorming]] proposal.
-
== url uid source ==
+
== representative hCard algorithm ==
-
After parsing the hCard(s) on a page, if there is one which has a "url" property whose value is the url of the page (source) and is also a "uid" property for the hCard, then that is the representative hCard for the page.
+
# '''url uid source.''' After parsing the hCard(s) on a page, if there is one which has a "url" property whose value is the url of the page (source) and is also a "uid" property for the hCard, then that is the representative hCard for the page.
 +
# '''url and rel me.''' If the aforementioned "url uid source" didn't find a representative hCard, then look for an hCard with a "url" property that also has the <code>rel="me"</code> relation. If you find such an hCard then you have found a representative hCard for the page.
-
== url and rel me ==
+
== open source implementations ==
-
If the aforementioned "url uid source" didn't find a representative hCard, then look for an hCard with a "url" property that also has the <code>rel="me"</code> relation. If you find such an hCard then you have found a representative hCard for the page.
+
The below open source implementations of '''representative hCard parsing''' have been contributed inline and are thus in the public domain per [[Microformats_Wiki:Copyrights]].
-
== Draft hKit (PHP5) code ==
+
=== Draft hKit (PHP5) code ===
I - ([[User:TomMorris|Tom]]) - have been working on implementing represenative hCard parsing in PHP so that a user can simply type in a URL pointing to a page with an hCard on it, and have their name and some details automatically filled in the form. The code below implements the following:
I - ([[User:TomMorris|Tom]]) - have been working on implementing represenative hCard parsing in PHP so that a user can simply type in a URL pointing to a page with an hCard on it, and have their name and some details automatically filled in the form. The code below implements the following:
# If there is only one hCard on a page, it uses that.
# If there is only one hCard on a page, it uses that.
Line 41: Line 42:
-
== jQuery (JavaScript) code ==
+
=== jQuery (JavaScript) code ===
The following JavaScript code follows the [[representative-hcard-brainstorming#current_proposal|current proposal for finding a representative hCard]]. It requires the [http://jquery.com/ jQuery] library, however, it can be easily switched over to another library.
The following JavaScript code follows the [[representative-hcard-brainstorming#current_proposal|current proposal for finding a representative hCard]]. It requires the [http://jquery.com/ jQuery] library, however, it can be easily switched over to another library.

Revision as of 23:14, 25 June 2009

Contents

representative hCard parsing

Assuming you are already using code that properly implements hcard-parsing, this page documents how to determine a representative hCard for a page using the current representative-hcard-brainstorming proposal.

representative hCard algorithm

  1. url uid source. After parsing the hCard(s) on a page, if there is one which has a "url" property whose value is the url of the page (source) and is also a "uid" property for the hCard, then that is the representative hCard for the page.
  2. url and rel me. If the aforementioned "url uid source" didn't find a representative hCard, then look for an hCard with a "url" property that also has the rel="me" relation. If you find such an hCard then you have found a representative hCard for the page.

open source implementations

The below open source implementations of representative hCard parsing have been contributed inline and are thus in the public domain per Microformats_Wiki:Copyrights.

Draft hKit (PHP5) code

I - (Tom) - have been working on implementing represenative hCard parsing in PHP so that a user can simply type in a URL pointing to a page with an hCard on it, and have their name and some details automatically filled in the form. The code below implements the following:

  1. If there is only one hCard on a page, it uses that.
  2. If there is more than one hCard on a page, it looks through to see if any of the cards have UID or URL fields that match the URL it searches, then selects that one if one exists.

It's experimental and quite 'alpha', so I'd suggest you test it and make adjustments as necessary.

<?php
 
// example hKit code to extract a representative hCard
// tom morris <http://tommorris.org>
// public domain 2007
 
include("hkit/hkit.class.php5");
$hkit = new hKit;
$result = $hkit->getByURL('hcard', $HTTP_GET_VARS['url']);
if (count($result) != 0) {
  if (count($result) == 1) {
    $repcard = $result[0];
  } else {
    foreach ($result as $card) {
      if (array_search($HTTP_GET_VARS['url'], $card) == true || $card['uid'] == $HTTP_GET_VARS['url']) {
        $repcard = $card;
      }
    }
  }
}
print_r($repcard);
?>


jQuery (JavaScript) code

The following JavaScript code follows the current proposal for finding a representative hCard. It requires the jQuery library, however, it can be easily switched over to another library.

/***
    Note: Extracts representative hCard
    Author: Sarven Capadisli http://csarven.ca/
    License: Public Domain 2009-06-04
*/
var sourceURI = window.location.href;
var rep_hCard = new Array();
 
function rep_hCard_uidurlsource() {
    $('.vcard .uid[href='+sourceURI+']').each(function() {
        $(this).each(function() {
            if ($(this).closest('.vcard').find('.url[href='+sourceURI+']').length > 0) {
                rep_hCard.push($(this).closest('.vcard')[0]);
            }
        });
    });
    return (rep_hCard.length > 0) ? true : false;
}
 
function rep_hCard_urlme() {
    $('.vcard .url[rel=me]').each(function() {
        rep_hCard.push($(this).closest('.vcard')[0]);
    });
    return (rep_hCard.length > 0) ? true : false;
}
 
if (rep_hCard_uidurlsource() || rep_hCard_urlme()) {
    rep_hCard = $($(rep_hCard)[0]); 
    rep_hCard_url = (rep_hCard.find('.uid').length > 0) ? rep_hCard.find('.uid')[0].href : rep_hCard.find('.url[rel=me]')[0].href;
    hCard_fn = $('.fn', rep_hCard).text();
    hCard_photo_src = ($('.photo', rep_hCard).length > 0) ? $('.photo', rep_hCard)[0].src : '';
}
else {
    //no representative hCard
}

--Sarven Capadisli 04:24, 4 June 2009 (UTC)

see also

representative-hcard-parsing was last modified: Wednesday, December 31st, 1969

Views