Skip to content

Instantly share code, notes, and snippets.

@mekanoe
Last active December 10, 2019 04:57
Show Gist options
  • Save mekanoe/98e3b76e805940a87f77 to your computer and use it in GitHub Desktop.
Save mekanoe/98e3b76e805940a87f77 to your computer and use it in GitHub Desktop.
very lazy implementation of the player.me api

I'll clean this up and make a proper repo eventually, this is a weird port from a node-webkit project.

If anyone would like to help out, punch me on player.

player =
_: "https://player.me/api"
_oauth:
clientId: undefined
clientSecret: undefined
header: undefined
__version: "1.0.0"
__author: "Katie Skytte <katie@phaser.tv>"
__license: "BSD-3-Clause"
auth:
_: (opts) -> new Promise (resolve, reject) ->
params =
client_id: player._oauth.clientId
client_secret: player._oauth.clientSecret
$.extend params, opts
$.ajax
method: "POST"
url: "#{player._}oauth/access_token"
data: params
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
passwordGrant: (username, password) ->
this._
username: username
password: password
grant_type: "password"
refresh: (token) ->
this._
refresh_token: token
grant_type: "refresh_token"
user:
get:
_: (id, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/users/#{id}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
default: -> this._ "default"
id: (id) -> this._ id
username: (slug) -> this._ slug, username: yes
# very very very very very lazy implementation.
# this should stay in any release for DRY purposes, but
# srsly, make abstractions to this at some point.
meta: (id, what, opts) -> new Promise (resolve, reject) ->
$.ajax
method: opts.method
url: "#{player._}v1/users/#{id}/#{what}#{if opts.subpath? then "/"+opts.subpath else ''}"
data: opts.params
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
follow: (id, who) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/users/#{id}/following"
data:
id: who
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
unfollow: (id, who) -> new Promise (resolve, reject) ->
$.ajax
method: "DELETE"
url: "#{player._}v1/users/#{id}/following/#{who}"
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
feed:
###
Feed of posts stuff
###
get: (opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/feed"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
###
Post related stuff
###
getPost: (id) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/feed/#{id}"
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
subState: (id, state = on) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/feed"
data:
id: id
subscribe: state
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
post: (body) -> new Promise (resolve, reject) ->
mp = new FormData()
__.each body (v, k) ->
mp.append(k, v)
$.ajax
method: "POST"
url: "#{player._}v1/feed"
data: mp
contentType: false
processData: false
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
getPostMeta: (id, what, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/feed/#{id}/#{what}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
likePost: (id, state = yes) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/feed/#{id}/likes"
data:
like: state
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
###
Comment related stuff
###
getComments: (id, commentId, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/feed/#{id}/comments#{if commentId? then '/'+commentId}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
postComment: (id, body) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/#{id}/comments"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
deleteComment: (pid, cid) -> new Promise (resolve, reject) ->
$.ajax
method: "DELETE"
url: "#{player._}v1/#{pid}/comments/#{cid}"
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
getCommentMeta: (id, cid, what, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/feed/#{id}/comments/#{cid}/#{what}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
likeComment: (id, cid, state = yes) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/feed/#{id}/comments/#{cid}/likes"
data:
like: state
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
###
Other actions under /feed/
###
blockUser: (id, state = yes) -> new Promise (resolve, reject) ->
$.ajax
method: if state then "POST" else "DELETE"
url: "#{player._}v1/feed/block"
data:
id: id
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
getStreams: (id, all = no) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/streaming"
data:
all: all
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
report: (uid, aid, type) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/report"
data:
target_id: uid,
data:
id: aid,
type: type
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
games:
list: (opts) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/games"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
suggest: (opts) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/games"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
get: (id) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/games/#{id}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
# very very very very very lazy implementation.
# this should stay in any release for DRY purposes, but
# srsly, make abstractions to this at some point.
meta: (id, what, opts) -> new Promise (resolve, reject) ->
$.ajax
method: opts.method
url: "#{player._}v1/games/#{id}/#{what}#{if opts.subpath? then "/"+opts.subpath else ''}"
data: opts.params
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
messaging:
listGroups: (user_id = undefined) -> new Promise (resolve, reject) ->
$.ajax
method: "GET"
url: "#{player._}v1/messages_groups"
data:
user_id: user_id
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
createGroup: (opts) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/messages_groups"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
sendMessage: createGroup
modifyGroup: (id, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/messages_groups/#{id}"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
getMessages: (id, opts) -> new Promise (resolve, reject) ->
$.ajax
method: "POST"
url: "#{player._}v1/messages_groups/#{id}/messages"
data: opts
.done (data, stat, x) ->
resolve data
.fail (x, stat, err) ->
reject err
# stuff to handle use on player.box or just in the browser
if window.box? and window.__private_box?
player._oauth.clientId = __private_box.oauth.id
player._oauth.clientSecret = __private_box.oauth.secret
__ = require 'underscore'
else
__ = _
$.ajaxSetup
headers:
"Authorization": player._oauth.header
if module.exports? then module.exports = player
// Generated by CoffeeScript 1.8.0
var player, __;
player = {
_: "https://player.me/api",
_oauth: {
clientId: void 0,
clientSecret: void 0,
header: void 0
},
__version: "1.0.0",
__author: "Katie Skytte <katie@phaser.tv>",
__license: "BSD-3-Clause",
auth: {
_: function(opts) {
return new Promise(function(resolve, reject) {
var params;
params = {
client_id: player._oauth.clientId,
client_secret: player._oauth.clientSecret
};
$.extend(params, opts);
return $.ajax({
method: "POST",
url: "" + player._ + "oauth/access_token",
data: params
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
passwordGrant: function(username, password) {
return this._({
username: username,
password: password,
grant_type: "password"
});
},
refresh: function(token) {
return this._({
refresh_token: token,
grant_type: "refresh_token"
});
}
},
user: {
get: {
_: function(id, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/users/" + id,
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
"default": function() {
return this._("default");
},
id: function(id) {
return this._(id);
},
username: function(slug) {
return this._(slug, {
username: true
});
}
},
meta: function(id, what, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: opts.method,
url: "" + player._ + "v1/users/" + id + "/" + what + (opts.subpath != null ? "/" + opts.subpath : ''),
data: opts.params
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
follow: function(id, who) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/users/" + id + "/following",
data: {
id: who
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
unfollow: function(id, who) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "DELETE",
url: "" + player._ + "v1/users/" + id + "/following/" + who
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
}
},
feed: {
/*
Feed of posts stuff
*/
get: function(opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/feed",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
/*
Post related stuff
*/
getPost: function(id) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/feed/" + id
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
subState: function(id, state) {
if (state == null) {
state = true;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/feed",
data: {
id: id,
subscribe: state
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
post: function(body) {
return new Promise(function(resolve, reject) {
var mp;
mp = new FormData();
__.each(body(function(v, k) {
return mp.append(k, v);
}));
return $.ajax({
method: "POST",
url: "" + player._ + "v1/feed",
data: mp,
contentType: false,
processData: false
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
getPostMeta: function(id, what, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/feed/" + id + "/" + what,
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
likePost: function(id, state) {
if (state == null) {
state = true;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/feed/" + id + "/likes",
data: {
like: state
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
/*
Comment related stuff
*/
getComments: function(id, commentId, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/feed/" + id + "/comments" + (commentId != null ? '/' + commentId : void 0),
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
postComment: function(id, body) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/" + id + "/comments",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
deleteComment: function(pid, cid) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "DELETE",
url: "" + player._ + "v1/" + pid + "/comments/" + cid
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
getCommentMeta: function(id, cid, what, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/feed/" + id + "/comments/" + cid + "/" + what,
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
likeComment: function(id, cid, state) {
if (state == null) {
state = true;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/feed/" + id + "/comments/" + cid + "/likes",
data: {
like: state
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
/*
Other actions under /feed/
*/
blockUser: function(id, state) {
if (state == null) {
state = true;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: state ? "POST" : "DELETE",
url: "" + player._ + "v1/feed/block",
data: {
id: id
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
getStreams: function(id, all) {
if (all == null) {
all = false;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/streaming",
data: {
all: all
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
report: function(uid, aid, type) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/report",
data: {
target_id: uid,
data: {
id: aid,
type: type
}
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
}
},
games: {
list: function(opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/games",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
suggest: function(opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/games",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
get: function(id) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/games/" + id,
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
meta: function(id, what, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: opts.method,
url: "" + player._ + "v1/games/" + id + "/" + what + (opts.subpath != null ? "/" + opts.subpath : ''),
data: opts.params
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
}
},
messaging: {
listGroups: function(user_id) {
if (user_id == null) {
user_id = void 0;
}
return new Promise(function(resolve, reject) {
return $.ajax({
method: "GET",
url: "" + player._ + "v1/messages_groups",
data: {
user_id: user_id
}
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
createGroup: function(opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/messages_groups",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
sendMessage: createGroup,
modifyGroup: function(id, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/messages_groups/" + id,
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
},
getMessages: function(id, opts) {
return new Promise(function(resolve, reject) {
return $.ajax({
method: "POST",
url: "" + player._ + "v1/messages_groups/" + id + "/messages",
data: opts
}).done(function(data, stat, x) {
return resolve(data);
}).fail(function(x, stat, err) {
return reject(err);
});
});
}
}
};
if ((window.box != null) && (window.__private_box != null)) {
player._oauth.clientId = __private_box.oauth.id;
player._oauth.clientSecret = __private_box.oauth.secret;
__ = require('underscore');
} else {
__ = _;
}
$.ajaxSetup({
headers: {
"Authorization": player._oauth.header
}
});
if (module.exports != null) {
module.exports = player;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment