[google-sgnodemapper] r235 committed - Add PK support for linkedin.com.

2 views
Skip to first unread message

codesite...@google.com

unread,
Aug 23, 2010, 6:02:58 PM8/23/10
to sgnodemapp...@googlegroups.com
Revision: 235
Author: mattr...@google.com
Date: Mon Aug 23 15:02:11 2010
Log: Add PK support for linkedin.com.

http://code.google.com/p/google-sgnodemapper/source/detail?r=235

Modified:
/trunk/autogen/nodemapper.js
/trunk/autogen/nodemapper_debug.js
/trunk/autogen/nodemapper_tests.js
/trunk/sites/simple.js

=======================================
--- /trunk/autogen/nodemapper.js Fri Apr 2 14:50:49 2010
+++ /trunk/autogen/nodemapper.js Mon Aug 23 15:02:11 2010
@@ -518,6 +518,9 @@
var PRIVATE_PROFILE_RE = /^(?:\/home\.php\#)?\/profile\.php\?id=(\d+)/;
var PUBLIC_PK_RE = /^\/(?:p|people)\/(?:[^\/]+\/(\d+))/;
var USERNAME_RE = /^\/(\w[\w\.\-]{2,30}\w)(?:$|[\/\?])/;
+var PATH_RE = /^\/([^\/\?]+)(\/[^\?]*)?(\?.*)?$/;
+var PK_RE = /^\d+$/;
+var IDENT_RE = /^(?:.+\/\d+)|(?:\w[\w\.\-]{2,30}\w)$/;
var NOT_USERNAME = {
people: 1,
pages: 1,
@@ -530,10 +533,20 @@
applications: 1,
reviews: 1,
ext: 1,
- marketplace: 1
+ marketplace: 1,
+ me: 1
};
var facebookHandler = function(url, host, path) {
var m;
+ if (host == 'graph.facebook.com' && (m = PATH_RE.exec(path))) {
+ var pkOrIdent = m[1];
+ if (PK_RE.exec(pkOrIdent)) {
+ return "sgn://graph.facebook.com/?pk=" + pkOrIdent;
+ } else if (IDENT_RE.exec(pkOrIdent) && !NOT_USERNAME[pkOrIdent]) {
+ return "sgn://facebook.com/?ident=" + pkOrIdent;
+ }
+ return url;
+ }
if (m = PRIVATE_PROFILE_RE.exec(path)) {
return "sgn://facebook.com/?pk=" + m[1];
}
@@ -552,6 +565,13 @@
nodemapper.registerDomain(
FACEBOOK_ALT_DOMAINS,
{ urlToGraphNode: facebookHandler });
+nodemapper.registerDomain(
+ "graph.facebook.com",
+ {name: "Facebook Graph API",
+ urlToGraphNode: facebookHandler,
+ pk_to_json: function (pk) { return "http://graph.facebook.com/" + pk;
},
+ pkRegexp: PK_RE
+ });
nodemapper.registerDomain(
"facebook.com",
{name: "Facebook",
@@ -564,8 +584,8 @@
}
},
pk_to_profile: function (pk) {
return "http://www.facebook.com/profile.php?id=" + pk; },
- pkRegexp: /^\d+$/,
- identRegexp: /^(?:.+\/\d+)|(?:\w[\w\.\-]{2,30}\w)$/,
+ pkRegexp: PK_RE,
+ identRegexp: IDENT_RE,
identCasePreserve: 1
});
})();
@@ -642,6 +662,20 @@
nodemapper.addSimpleHandler("friendfeed.com", "ident_to_atom",
"http://friendfeed.com/", "?format=atom");
})();
+(function(){
+nodemapper.registerDomain("github.com",
+{
+ name: "GitHub",
+ urlToGraphNode: nodemapper.createPathRegexpHandler(
+ "github.com", /^\/(\w+)(?:\?|$)/)
+});
+nodemapper.addSimpleHandler("github.com", "ident_to_profile",
+ "http://github.com/");
+nodemapper.addSimpleHandler("github.com", "ident_to_atom",
+ "http://github.com/", ".atom");
+nodemapper.addSimpleHandler("github.com", "ident_to_addfriend",
+ "http://github.com/users/follow?target=");
+})();
(function(){
var GOOGLE_TLDS = "ad ae am as at az ba be bg bi bs ca cd cg ch ci cl cn
co.bw co.ck co.cr co.id co.il co.im co.in co.je co.jp co.ke co.kr co.ls
co.ma co.mw co.nz co.pn co.th co.tt co.ug co.uk co.uz co.ve co.vi co.yu
co.za co.zm co.zw com com.af com.ag com.ar com.au com.bd com.bh com.bn
com.bo com.br com.bz com.cn com.co com.cu com.do com.ec com.eg com.et
com.fj com.gi com.gr com.gt com.hk com.jm com.kh com.kz com.lv com.ly
com.mt com.mw com.mx com.my com.na com.nf com.ng com.ni com.np com.om
com.pa com.pe com.ph com.pk com.pl com.pr com.py com.qa com.ru com.sa
com.sb com.sg com.sl com.sv com.tj com.tr com.tt com.tw com.ua com.uy
com.vc com.ve com.vn cz de dj dk dm ee es fi fm fr ge gg gl gm gp gr gy hk
hn hr ht hu ie is it je jo kg ki kz la li lk lt lu lv md me mn ms mu mv mw
ne.jp nl no nr nu off.ai ph pl pn pt ro ru rw sc se sg sh si sk sl sm sn st
tk tl tm to tp tt us vg vn vu ws".split(" ");
function googleDomains(prefix) {
@@ -1332,11 +1366,22 @@
nodemapper.registerDomain(
"linkedin.com",
{name: "LinkedIn",
- urlToGraphNode: nodemapper.createSomethingSlashUsernameHandler(
- "in",
- "linkedin.com")});
+ urlToGraphNode: nodemapper.createFirstMatchHandler([
+ nodemapper.createSomethingSlashUsernameHandler(
+ "in",
+ "linkedin.com"),
+ nodemapper.createSomethingSlashUsernameHandler(
+ "e/fpf",
+ "linkedin.com",
+ {keyName: "pk"}),
+ nodemapper.createPathRegexpHandler(
+ "linkedin.com",
+ /(?:\?|&)key=(\d+)(?:$|&)/,
+ {keyName: "pk"})])});
nodemapper.addSimpleHandler("linkedin.com", "ident_to_profile",
"http://www.linkedin.com/in/", "");
+nodemapper.addSimpleHandler("linkedin.com", "pk_to_profile",
+ "http://www.linkedin.com/e/fpf/", "");
nodemapper.registerDomain(
"ma.gnolia.com",
{name: "Ma.gnolia",
@@ -1393,8 +1438,8 @@
nodemapper.addSimpleHandler("smugmug.com", "ident_to_profile",
"http://", ".smugmug.com/");
nodemapper.addSimpleHandler("smugmug.com", "ident_to_atom",
- "http://www.smugmug.com/hack/feed.mg?Type=nicknameRecentPhotos&Data=",
- "&format=atom03");
+ "http://www.smugmug.com/hack/feed.mg?Type=nickname&Data=",
+ "&format=atom10");
nodemapper.registerDomain(
"vox.com",
{name: "Vox",
=======================================
--- /trunk/autogen/nodemapper_debug.js Fri Apr 2 14:50:49 2010
+++ /trunk/autogen/nodemapper_debug.js Mon Aug 23 15:02:11 2010
@@ -908,6 +908,12 @@
// $1: "sarahpalin" (ident, form 2 for facebook)
var USERNAME_RE = /^\/(\w[\w\.\-]{2,30}\w)(?:$|[\/\?])/;

+// $1: first part of the path, $2: rest of the path, $3: query params
+var PATH_RE = /^\/([^\/\?]+)(\/[^\?]*)?(\?.*)?$/;
+
+var PK_RE = /^\d+$/;
+var IDENT_RE = /^(?:.+\/\d+)|(?:\w[\w\.\-]{2,30}\w)$/;
+
var NOT_USERNAME = {
people: 1,
pages: 1,
@@ -920,11 +926,22 @@
applications: 1,
reviews: 1,
ext: 1,
- marketplace: 1
+ marketplace: 1,
+ me: 1
};

var facebookHandler = function(url, host, path) {
var m;
+ if (host == 'graph.facebook.com' && (m = PATH_RE.exec(path))) {
+ var pkOrIdent = m[1];
+ if (PK_RE.exec(pkOrIdent)) {
+ // put numeric IDs in a separate sgn domain since they're not all
people
+ return "sgn://graph.facebook.com/?pk=" + pkOrIdent;
+ } else if (IDENT_RE.exec(pkOrIdent) && !NOT_USERNAME[pkOrIdent]) {
+ return "sgn://facebook.com/?ident=" + pkOrIdent;
+ }
+ return url;
+ }
if (m = PRIVATE_PROFILE_RE.exec(path)) {
return "sgn://facebook.com/?pk=" + m[1];
}
@@ -946,6 +963,14 @@
FACEBOOK_ALT_DOMAINS,
{ urlToGraphNode: facebookHandler });

+nodemapper.registerDomain(
+ "graph.facebook.com",
+ {name: "Facebook Graph API",
+ urlToGraphNode: facebookHandler,
+ pk_to_json: function (pk) { return "http://graph.facebook.com/" + pk;
},
+ pkRegexp: PK_RE
+ });
+
nodemapper.registerDomain(
"facebook.com",
{name: "Facebook",
@@ -958,8 +983,8 @@
}
},
pk_to_profile: function (pk) {
return "http://www.facebook.com/profile.php?id=" + pk; },
- pkRegexp: /^\d+$/,
- identRegexp: /^(?:.+\/\d+)|(?:\w[\w\.\-]{2,30}\w)$/,
+ pkRegexp: PK_RE,
+ identRegexp: IDENT_RE,
identCasePreserve: 1
});

@@ -1057,6 +1082,26 @@
})();
// (end of included file sites/friendfeed.js)

+//
=========================================================================
+// Begin included file sites/github.js
+(function(){
+nodemapper.registerDomain("github.com",
+{
+ name: "GitHub",
+ urlToGraphNode: nodemapper.createPathRegexpHandler(
+ "github.com", /^\/(\w+)(?:\?|$)/)
+});
+
+nodemapper.addSimpleHandler("github.com", "ident_to_profile",
+ "http://github.com/");
+nodemapper.addSimpleHandler("github.com", "ident_to_atom",
+ "http://github.com/", ".atom");
+nodemapper.addSimpleHandler("github.com", "ident_to_addfriend",
+ "http://github.com/users/follow?target=");
+
+})();
+// (end of included file sites/github.js)
+
//
=========================================================================
// Begin included file sites/google.js
(function(){
@@ -2032,12 +2077,23 @@
nodemapper.registerDomain(
"linkedin.com",
{name: "LinkedIn",
- urlToGraphNode: nodemapper.createSomethingSlashUsernameHandler(
- "in",
- "linkedin.com")});
+ urlToGraphNode: nodemapper.createFirstMatchHandler([
+ nodemapper.createSomethingSlashUsernameHandler(
+ "in",
+ "linkedin.com"),
+ nodemapper.createSomethingSlashUsernameHandler(
+ "e/fpf",
+ "linkedin.com",
+ {keyName: "pk"}),
+ nodemapper.createPathRegexpHandler(
+ "linkedin.com",
+ /(?:\?|&)key=(\d+)(?:$|&)/,
+ {keyName: "pk"})])});

nodemapper.addSimpleHandler("linkedin.com", "ident_to_profile",
"http://www.linkedin.com/in/", "");
+nodemapper.addSimpleHandler("linkedin.com", "pk_to_profile",
+ "http://www.linkedin.com/e/fpf/", "");

nodemapper.registerDomain(
"ma.gnolia.com",
@@ -2102,8 +2158,8 @@
nodemapper.addSimpleHandler("smugmug.com", "ident_to_profile",
"http://", ".smugmug.com/");
nodemapper.addSimpleHandler("smugmug.com", "ident_to_atom",
- "http://www.smugmug.com/hack/feed.mg?Type=nicknameRecentPhotos&Data=",
- "&format=atom03");
+ "http://www.smugmug.com/hack/feed.mg?Type=nickname&Data=",
+ "&format=atom10");

nodemapper.registerDomain(
"vox.com",
=======================================
--- /trunk/autogen/nodemapper_tests.js Fri Apr 2 14:50:49 2010
+++ /trunk/autogen/nodemapper_tests.js Mon Aug 23 15:02:11 2010
@@ -94,6 +94,20 @@

["urlFromGraphNode", "sgn://facebook.com/?ident=sarahpalin", "profile", "http://www.facebook.com/sarahpalin"],

["urlToGraphNode", "http://www.facebook.com/sarahpalin", "sgn://facebook.com/?ident=sarahpalin"],

["urlToGraphNode", "http://www.facebook.com/BrA-D.F..iTz", "sgn://facebook.com/?ident=bradfitz"],
+
["urlToGraphNode", "http://graph.facebook.com/neilfred", "sgn://facebook.com/?ident=neilfred"],
+
["urlToGraphNode", "http://graph.facebook.com/neilfred/friends", "sgn://facebook.com/?ident=neilfred"],
+
["urlToGraphNode", "http://graph.facebook.com/neilfred?foo=bar", "sgn://facebook.com/?ident=neilfred"],
+
["urlToGraphNode", "http://graph.facebook.com/neilfred/friends?foo=bar", "sgn://facebook.com/?ident=neilfred"],
+
["urlToGraphNode", "http://graph.facebook.com/me", "http://graph.facebook.com/me"],
+
["urlToGraphNode", "http://graph.facebook.com/me/friends", "http://graph.facebook.com/me/friends"],
+
["urlToGraphNode", "http://graph.facebook.com/me?foo=bar", "http://graph.facebook.com/me?foo=bar"],
+
["urlToGraphNode", "http://graph.facebook.com/me/friends?foo=bar", "http://graph.facebook.com/me/friends?foo=bar"],
+
["urlToGraphNode", "http://graph.facebook.com/659248503", "sgn://graph.facebook.com/?pk=659248503"],
+
["urlToGraphNode", "http://graph.facebook.com/659248503/friends", "sgn://graph.facebook.com/?pk=659248503"],
+
["urlToGraphNode", "http://graph.facebook.com/659248503?foo=bar", "sgn://graph.facebook.com/?pk=659248503"],
+
["urlToGraphNode", "http://graph.facebook.com/659248503/friends?foo=bar", "sgn://graph.facebook.com/?pk=659248503"],
+
["urlFromGraphNode", "sgn://graph.facebook.com/?pk=659248503", "json", "http://graph.facebook.com/659248503"],
+
["urlToGraphNode", "http://graph.facebook.com/659248503", "sgn://graph.facebook.com/?pk=659248503"],

["urlToGraphNode", "http://www.flickr.com/people/crucially", "sgn://flickr.com/?ident=crucially"],

["urlToGraphNode", "http://www.flickr.com/people/crucially/", "sgn://flickr.com/?ident=crucially"],

["urlToGraphNode", "http://www.flickr.com/photos/crucially", "sgn://flickr.com/?ident=crucially"],
@@ -159,6 +173,14 @@

["urlToGraphNode", "http://friendfeed.com/ade", "sgn://friendfeed.com/?ident=ade"],

["urlFromGraphNode", "sgn://friendfeed.com/?ident=ade", "atom", "http://friendfeed.com/ade?format=atom"],

["urlToGraphNode", "http://friendfeed.com/ade?format=atom", "sgn://friendfeed.com/?ident=ade"],
+
["urlToGraphNode", "http://github.com/sporkmonger", "sgn://github.com/?ident=sporkmonger"],
+
["urlToGraphNode", "http://github.com/sporkmonger?locale=en", "sgn://github.com/?ident=sporkmonger"],
+
["urlFromGraphNode", "sgn://github.com/?ident=sporkmonger", "profile", "http://github.com/sporkmonger"],
+
["urlToGraphNode", "http://github.com/sporkmonger", "sgn://github.com/?ident=sporkmonger"],
+
["urlFromGraphNode", "sgn://github.com/?ident=sporkmonger", "atom", "http://github.com/sporkmonger.atom"],
+
["urlToGraphNode", "http://github.com/sporkmonger.atom", "sgn://github.com/?ident=sporkmonger"],
+
["urlFromGraphNode", "sgn://github.com/?ident=sporkmonger", "addfriend", "http://github.com/users/follow?target=sporkmonger"],
+
["urlToGraphNode", "http://github.com/users/follow?target=sporkmonger", "sgn://github.com/?ident=sporkmonger"],

["urlToGraphNode", "http://www.google.de/reader/shared/12649763491721032377", "sgn://reader.google.com/?pk=12649763491721032377"],

["urlToGraphNode", "http://www.google.com/reader/shared/12649763491721032377", "sgn://reader.google.com/?pk=12649763491721032377"],

["urlToGraphNode", "http://www.google.com/reader/public/atom/user/12649763491721032377/state/com.google/broadcast", "sgn://reader.google.com/?pk=12649763491721032377"],
@@ -484,6 +506,11 @@

["urlToGraphNode", "http://www.linkedin.com/in/foobar", "sgn://linkedin.com/?ident=foobar"],

["urlFromGraphNode", "sgn://linkedin.com/?ident=foobar", "profile", "http://www.linkedin.com/in/foobar"],

["urlToGraphNode", "http://www.linkedin.com/in/foobar", "sgn://linkedin.com/?ident=foobar"],
+
["urlToGraphNode", "http://linkedin.com/e/fpf/12345", "sgn://linkedin.com/?pk=12345"],
+
["urlToGraphNode", "http://linkedin.com/profile?viewProfile=&key=12345", "sgn://linkedin.com/?pk=12345"],
+
["urlToGraphNode", "http://linkedin.com/profile?viewProfile=&key=12345&authToken=foo", "sgn://linkedin.com/?pk=12345"],
+
["urlFromGraphNode", "sgn://linkedin.com/?pk=12345", "profile", "http://www.linkedin.com/e/fpf/12345"],
+
["urlToGraphNode", "http://www.linkedin.com/e/fpf/12345", "sgn://linkedin.com/?pk=12345"],

["urlToGraphNode", "http://ma.gnolia.com/people/daveman692", "sgn://ma.gnolia.com/?ident=daveman692"],

["urlToGraphNode", "http://ma.gnolia.com/people/daveman692/", "sgn://ma.gnolia.com/?ident=daveman692"],

["urlFromGraphNode", "sgn://ma.gnolia.com/?ident=daveman692", "profile", "http://ma.gnolia.com/people/daveman692"],
@@ -524,8 +551,8 @@

["urlToGraphNode", "http://jsmarr.smugmug.com", "sgn://smugmug.com/?ident=jsmarr"],

["urlFromGraphNode", "sgn://smugmug.com/?ident=jsmarr", "profile", "http://jsmarr.smugmug.com/"],

["urlToGraphNode", "http://jsmarr.smugmug.com/", "sgn://smugmug.com/?ident=jsmarr"],
-
["urlFromGraphNode", "sgn://smugmug.com/?ident=jsmarr", "atom", "http://www.smugmug.com/hack/feed.mg?Type=nicknameRecentPhotos&Data=jsmarr&format=atom03"],
-
["urlToGraphNode", "http://www.smugmug.com/hack/feed.mg?Type=nicknameRecentPhotos&Data=jsmarr&format=atom03", "sgn://smugmug.com/?ident=jsmarr"],
+
["urlFromGraphNode", "sgn://smugmug.com/?ident=jsmarr", "atom", "http://www.smugmug.com/hack/feed.mg?Type=nickname&Data=jsmarr&format=atom10"],
+
["urlToGraphNode", "http://www.smugmug.com/hack/feed.mg?Type=nickname&Data=jsmarr&format=atom10", "sgn://smugmug.com/?ident=jsmarr"],

["urlToGraphNode", "http://bradfitz.tumblr.com/", "sgn://tumblr.com/?ident=bradfitz"],

["urlFromGraphNode", "sgn://tumblr.com/?ident=bradfitz", "profile", "http://bradfitz.tumblr.com/"],

["urlToGraphNode", "http://bradfitz.tumblr.com/", "sgn://tumblr.com/?ident=bradfitz"],
=======================================
--- /trunk/sites/simple.js Thu Jul 8 07:15:05 2010
+++ /trunk/sites/simple.js Mon Aug 23 15:02:11 2010
@@ -64,12 +64,23 @@
nodemapper.registerDomain(
"linkedin.com",
{name: "LinkedIn",
- urlToGraphNode: nodemapper.createSomethingSlashUsernameHandler(
- "in",
- "linkedin.com")});
+ urlToGraphNode: nodemapper.createFirstMatchHandler([
+ nodemapper.createSomethingSlashUsernameHandler(
+ "in",
+ "linkedin.com"),
+ nodemapper.createSomethingSlashUsernameHandler(
+ "e/fpf",
+ "linkedin.com",
+ {keyName: "pk"}),
+ nodemapper.createPathRegexpHandler(
+ "linkedin.com",
+ /(?:\?|&)key=(\d+)(?:$|&)/,
+ {keyName: "pk"})])});

nodemapper.addSimpleHandler("linkedin.com", "ident_to_profile",
"http://www.linkedin.com/in/", "");
+nodemapper.addSimpleHandler("linkedin.com", "pk_to_profile",
+ "http://www.linkedin.com/e/fpf/", "");

nodemapper.registerDomain(
"ma.gnolia.com",
@@ -562,6 +573,11 @@
http://www.linkedin.com/in/foobar sgn://linkedin.com/?ident=foobar
profile(sgn://linkedin.com/?ident=foobar)
http://www.linkedin.com/in/foobar

+http://linkedin.com/e/fpf/12345 sgn://linkedin.com/?pk=12345
+http://linkedin.com/profile?viewProfile=&key=12345
sgn://linkedin.com/?pk=12345
+http://linkedin.com/profile?viewProfile=&key=12345&authToken=foo
sgn://linkedin.com/?pk=12345
+profile(sgn://linkedin.com/?pk=12345) http://www.linkedin.com/e/fpf/12345
+
# TODO(bradfitz): pk URLs for these types:
# http://www.linkedin.com/pub/5/512/39a

Reply all
Reply to author
Forward
0 new messages