WebFinger library for PHP released
I'm implementing OpenID for SemanticScuttle, your self-hosted social bookmark manager. To log in with OpenID, you need to know your OpenID URL, which many people do not know, and don't want to know. Most know their email address, and thanks to WebFinger, this is all you have to know!
WebFinger enables applications to discover information about people by just their e-mail address - for example their OpenID URL!
I didn't find a single standalone WebFinger library for PHP, so I asked on StackOverflow, but did not get any responses. Failed to stand on the shoulders of giants, I went the hard way and implemented it all myself: Net_WebFinger, based on XML_XRD.
Implementation
WebFinger weaves RFC 6415: Web Host Metadata with LRDD which both use XRD files.
Thus the first step was to build a clean XRD library for PHP, with an intuitive API and 100% unit test coverage. I proposed the XML_XRD package on 2012-02-01, called for votes 8 days later. It was accepted with 11 votes. Extensive documentation does also exist now.
After the foundation was laid, I proposed the Net_WebFinger package. It was accepted as new PEAR this night, and just some minutes ago it got its first official release and a lot of documenation.
Usage
So, discovery is easy now! First, install the PEAR package:
$ pear install net_webfinger-alphaNow the PHP code:
finger('user@example.org'); if ($react-openid !== null) { echo 'OpenID provider found: ' . $react-openid . "\n"; } //list all other links: foreach ($react as $link) { echo 'Link: ' . $link-rel . ' to ' . $link-href . "\n"; } ?WebFinger CLI
Net_WebFinger ships with a command line client that you can use to try it out. Find it with
$ pear list-files net_webfinger|grep cli doc /usr/share/php/docs/Net_WebFinger/examples/webfinger-cli.phpYahoo and Google already support WebFinger. Distributed social networks like status.net (that powers identi.ca) and Diaspora use WebFinger to distribute public encryption keys, OStatus and Salmon URLs. You can try one of those user addresses, too.
$ php /usr/share/php/docs/Net_WebFinger/examples/webfinger-cli.php klimpong@gmail.com Discovering klimpong@gmail.com Information secure? false OpenID provider: http://www.google.com/profiles/klimpong Link: http://portablecontacts.net/spec/1.0: http://www-opensocial.googleusercontent.com/api/people/ Link: http://portablecontacts.net/spec/1.0#me: http://www-opensocial.googleusercontent.com/api/people/102024993121974049099/ Link: http://webfinger.net/rel/profile-page: http://www.google.com/profiles/klimpong Link: http://microformats.org/profile/hcard: http://www.google.com/profiles/klimpong Link: http://gmpg.org/xfn/11: http://www.google.com/profiles/klimpong Link: http://specs.openid.net/auth/2.0/provider: http://www.google.com/profiles/klimpong Link: describedby: http://www.google.com/profiles/klimpong Link: describedby: http://www.google.com/s2/webfinger/?q=acct%3Aklimpong%40gmail.com&fmt=foaf Link: http://schemas.google.com/g/2010#updates-from: https://www.googleapis.com/buzz/v1/activities/102024993121974049099/@public $ php /usr/share/php/docs/Net_WebFinger/examples/webfinger-cli.php singpolyma@identi.ca Discovering singpolyma@Truncated by Planet PHP, read more at the original (another 1043 bytes)


