[google-sgnodemapper] r231 committed - fixing graph.facebook.com support a little more properly -- now mappin...

0 views
Skip to first unread message

codesite...@google.com

unread,
May 5, 2010, 3:21:06 PM5/5/10
to sgnodemapp...@googlegroups.com
Revision: 231
Author: neilfred
Date: Wed May 5 12:20:07 2010
Log: fixing graph.facebook.com support a little more properly -- now
mapping ident values into facebook.com sgn domain but pk values into
graph.facebook.com domain because they're not all people and hence wouldn't
map back to http URLs properly otherwise.

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

Modified:
/trunk/sites/facebook.js

=======================================
--- /trunk/sites/facebook.js Mon May 3 15:58:58 2010
+++ /trunk/sites/facebook.js Wed May 5 12:20:07 2010
@@ -42,6 +42,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,
@@ -54,18 +60,21 @@
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') {
- var pkOrIdent = path.substr(1);
- if (m = nodemapper.PK_REGEXP.exec(pkOrIdent)) {
- return "sgn://facebook.com/?pk=" + pkOrIdent;
- } else {
+ 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];
@@ -88,6 +97,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",
@@ -100,8 +117,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
});

@@ -146,6 +163,23 @@
# craziness:
http://www.facebook.com/BrA-D.F..iTz sgn://facebook.com/?ident=bradfitz

-# graph.facebook.com URLs can use either pk or ident
+# graph.facebook.com URL with an ident
http://graph.facebook.com/neilfred sgn://facebook.com/?ident=neilfred
-http://graph.facebook.com/659248503 sgn://facebook.com/?pk=659248503
+http://graph.facebook.com/neilfred/friends
sgn://facebook.com/?ident=neilfred
+http://graph.facebook.com/neilfred?foo=bar
sgn://facebook.com/?ident=neilfred
+http://graph.facebook.com/neilfred/friends?foo=bar
sgn://facebook.com/?ident=neilfred
+
+# invalid ident string does not map to sgn URL at all
+http://graph.facebook.com/me http://graph.facebook.com/me
+http://graph.facebook.com/me/friends http://graph.facebook.com/me/friends
+http://graph.facebook.com/me?foo=bar http://graph.facebook.com/me?foo=bar
+http://graph.facebook.com/me/friends?foo=bar
http://graph.facebook.com/me/friends?foo=bar
+
+# graph.facebook.com URL with a pk uses the graph.facebook.com sgn domain
+http://graph.facebook.com/659248503 sgn://graph.facebook.com/?pk=659248503
+http://graph.facebook.com/659248503/friends
sgn://graph.facebook.com/?pk=659248503
+http://graph.facebook.com/659248503?foo=bar
sgn://graph.facebook.com/?pk=659248503
+http://graph.facebook.com/659248503/friends?foo=bar
sgn://graph.facebook.com/?pk=659248503
+
+# graph.facebook.com sgn domain maps back to a graph.facebook.com http URL
+json(sgn://graph.facebook.com/?pk=659248503)
http://graph.facebook.com/659248503

--
You received this message because you are subscribed to the Google Groups "sgnodemapper-commits" group.
To post to this group, send email to sgnodemapp...@googlegroups.com.
To unsubscribe from this group, send email to sgnodemapper-com...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/sgnodemapper-commits?hl=en.

Reply all
Reply to author
Forward
0 new messages