PluginProbe
Github Embed / 1.3
Github Embed v1.3
trunk 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.0.1 2.0.2 2.1.0 2.2.0 2.2.1
← All changes | github-api.php +126 -89 2.2.01.3 View file →
@@ -1,90 +1,91 @@
1 -<?php
1 +<?php
2 2
3 -// 0 - none.
4 -define( 'GEDEBUG_NONE', 0 );
5 3
6 -// 1 - call logging only.
7 -define( 'GEDEBUG_CALL', 1 );
8 4
9 -// 2 - calls, and responses.
10 -define( 'GEDEBUG_RESP', 2 );
5 +// 0 - none
6 +define ( 'GEDEBUG_NONE', 0 );
11 7
12 -// Selected debug level.
13 -if ( ! defined( 'GITHUB_API_LEVEL' ) ) {
14 - define( 'GITHUB_API_LEVEL', GEDEBUG_NONE );
15 -}
8 +// 1 - call logging only
9 +define ( 'GEDEBUG_CALL', 1 );
16 10
11 +// 2 - calls, and responses
12 +define ( 'GEDEBUG_RESP', 2 );
13 +
14 +// Selected debug level
15 +define ( 'GITHUB_API_LEVEL', GEDEBUG_RESP );
16 +
17 +
17 18 /**
18 19 * This class contains all the functions that actually retrieve information from the GitHub API
19 20 */
20 21 class github_api {
21 22
23 +
22 24 private $client_id = null;
23 25 private $client_secret = null;
24 - private $access_token = null;
25 - private $access_token_username = null;
26 26
27 +
28 +
27 29 /**
28 30 * Allow the client ID / secret to be set, and used for subsequent calls
29 31 */
30 - public function __construct() {
31 - add_action( 'plugins_loaded', array( $this, 'set_credentials' ) );
32 - add_filter( 'http_request_timeout', array( $this, 'http_request_timeout' ) );
32 + function __construct() {
33 +
34 + add_action ( 'plugins_loaded', array ( $this, 'set_credentials' ) );
35 + add_filter ( 'http_request_timeout', array ( $this, 'http_request_timeout' ) );
36 +
33 37 }
34 38
39 +
40 +
35 41 /**
36 42 * Extend the timeout since API calls can easily exceed 5 seconds
37 - *
38 - * @param int $seconds The current timeout setting
39 - *
43 + * @param int $seconds The current timeout setting
40 44 * @return int The revised timeout setting
41 45 */
42 - public function http_request_timeout( $seconds ) {
46 + function http_request_timeout ( $seconds ) {
43 47 return $seconds < 25 ? 25 : $seconds;
44 48 }
45 49
50 +
51 +
46 52 /**
47 53 * If you find yourself hitting rate limits, then you can register an application
48 - * with GitHub(http://developer.github.com/v3/oauth/) use the filters here to
54 + * with GitHub (http://developer.github.com/v3/oauth/) use the filters here to
49 55 * provide the credentials.
50 56 */
51 - public function set_credentials() {
52 - $this->client_id = apply_filters( 'github-embed-client-id', $this->client_id );
53 - $this->client_secret = apply_filters( 'github-embed-client-secret', $this->client_secret );
54 - $this->access_token = apply_filters( 'github-embed-access-token', $this->access_token );
55 - $this->access_token_username = apply_filters( 'github-embed-access-token-username', $this->access_token_username );
57 + public function set_credentials () {
58 +
59 + $this->client_id = apply_filters ( 'github-embed-client-id', $this->client_id );
60 + $this->client_secret = apply_filters ( 'github-embed-client-secret', $this->client_id );
61 +
56 62 }
57 63
58 - private function call_api( $url ) {
59 - // Allow users to supply auth details to enable a higher rate limit [Deprecated]
60 - if ( ! empty( $this->client_id ) && ! empty( $this->client_secret ) ) {
61 - $url = add_query_arg(
62 - array(
63 - 'client_id' => $this->client_id,
64 - 'client_secret' => $this->client_secret
65 - ),
66 - $url
67 - );
64 +
65 +
66 + private function call_api ( $url ) {
67 +
68 + // Allow users to supply auth details to enable a higher rate limit
69 + if ( ! empty ( $this->client_id ) && ! empty ( $this->client_secret ) ) {
70 + $url = add_query_arg(array ( 'client_id' => $this->client_id,
71 + 'client_secret' => $this->client_secret),
72 + $url );
68 73 }
69 74
70 - $args = array(
71 - 'user-agent' => 'WordPress Github oEmbed plugin - https://github.com/leewillis77/wp-github-oembed'
72 - );
73 - if ( ! empty( $this->access_token_username ) && ! empty ( $this->access_token ) ) {
74 - $args['headers'] = [
75 - 'Authorization' => 'Basic ' . base64_encode( $this->access_token_username . ':' . $this->access_token ),
76 - ];
77 - }
78 - $this->log( __FUNCTION__ . " : $url", GEDEBUG_CALL );
75 + $args = array ( 'user-agent' => 'WordPress Github oEmbed plugin - https://github.com/leewillis77/wp-github-oembed');
76 +
77 + $this->log ( __FUNCTION__." : $url", GEDEBUG_CALL );
79 78
80 - $results = wp_remote_get( $url, $args );
79 + $results = wp_remote_get ( $url, $args );
81 80
81 + $this->log ( __FUNCTION__." : ".print_r($results,1), GEDEBUG_RESP );
82 +
82 83 if ( is_wp_error( $results ) ||
83 - ! isset( $results['response']['code'] ) ||
84 - $results['response']['code'] != '200' ) {
85 - header( 'HTTP/1.0 404 Not Found' );
86 - die( 'Octocat is lost, and afraid' );
84 + ! isset ( $results['response']['code'] ) ||
85 + $results['response']['code'] != '200' ) {
86 + header ( 'HTTP/1.0 404 Not Found' );
87 + die ( 'Octocat is lost, and afraid' );
87 88 }
88 89
89 90 return $results;
90 91
@@ -89,78 +90,114 @@
89 90 return $results;
90 91
91 92 }
92 93
94 +
95 +
93 96 /**
94 97 * Get a repository from the GitHub API
95 - *
96 - * @param string $owner The repository's owner
97 - * @param string $repository The respository name
98 - *
98 + * @param string $owner The repository's owner
99 + * @param string $repository The respository name
99 100 * @return object The response from the GitHub API
100 101 */
101 - public function get_repo( $owner, $repository ) {
102 - $this->log( "get_repo( $owner, $repository )", GEDEBUG_CALL );
103 - $results = $this->call_api( "https://api.github.com/repos/$owner/$repository" );
102 + public function get_repo ( $owner, $repository ) {
104 103
105 - return json_decode( $results['body'] );
104 + $this->log ( "get_repo ( $owner, $repository )", GEDEBUG_CALL );
106 105
106 + $owner = trim ( $owner, '/' );
107 + $repository = trim ( $repository, '/' );
108 +
109 + $results = $this->call_api ( "https://api.github.com/repos/$owner/$repository" );
110 +
111 + return json_decode ( $results['body'] );
112 +
107 113 }
108 114
115 +
116 +
109 117 /**
110 118 * Get commit information for a repository from the GitHub API
111 - *
112 - * @param string $owner The repository's owner
113 - * @param string $repository The respository name
114 - *
119 + * @param string $owner The repository's owner
120 + * @param string $repository The respository name
115 121 * @return object The response from the GitHub API
116 122 */
117 - public function get_repo_commits( $owner, $repository ) {
118 - $this->log( "get_repo_commits( $owner, $repository )", GEDEBUG_CALL );
119 - $results = $this->call_api( "https://api.github.com/repos/$owner/$repository/commits" );
123 + public function get_repo_commits ( $owner, $repository ) {
120 124
121 - return json_decode( $results['body'] );
125 + $this->log ( "get_repo_commits ( $owner, $repository )", GEDEBUG_CALL );
126 +
127 + $owner = trim ( $owner, '/' );
128 + $repository = trim ( $repository, '/' );
129 +
130 + $results = $this->call_api ( "https://api.github.com/repos/$owner/$repository/commits" );
131 +
132 + return json_decode ( $results['body'] );
133 +
122 134 }
123 135
136 +
137 +
124 138 /**
125 139 * Get a milestone summary from the GitHub API
126 - *
127 - * @param string $owner The repository's owner
128 - * @param string $repository The respository name
129 - * @param string $milestone The milestone ID
130 - *
140 + * @param string $owner The repository's owner
141 + * @param string $repository The respository name
142 + * @param string $milestone The milestone ID
131 143 * @return object The response from the GitHub API
132 144 */
133 - public function get_repo_milestone_summary( $owner, $repository, $milestone ) {
134 - $this->log( "get_repo_milestone_summary( $owner, $repository, $milestone )", GEDEBUG_CALL );
135 - $results = $this->call_api( "https://api.github.com/repos/$owner/$repository/milestones/$milestone" );
145 + public function get_repo_milestone_summary ( $owner, $repository, $milestone ) {
136 146
137 - return json_decode( $results['body'] );
147 + $this->log ( "get_repo_milestone_summary ( $owner, $repository, $milestone )", GEDEBUG_CALL );
148 +
149 + $owner = trim ( $owner, '/' );
150 + $repo = trim ( $repo, '/' );
151 +
152 + $results = $this->call_api ( "https://api.github.com/repos/$owner/$repository/milestones/$milestone" );
153 +
154 + return json_decode ( $results['body'] );
155 +
138 156 }
139 157
140 - public function get_repo_contributors( $owner, $repository ) {
141 - $this->log( "get_repo_contributors( $owner, $repository )", GEDEBUG_CALL );
142 - $results = $this->call_api( "https://api.github.com/repos/$owner/$repository/stats/contributors" );
143 158
144 - return json_decode( $results['body'] );
159 +
160 + public function get_repo_contributors ( $owner, $repository ) {
161 +
162 + $this->log ( "get_repo_contributors ( $owner, $repository )", GEDEBUG_CALL );
163 +
164 + $owner = trim ( $owner, '/' );
165 + $repo = trim ( $repo, '/' );
166 +
167 + $results = $this->call_api( "https://api.github.com/repos/$owner/$repository/collaborators" );
168 +
169 + return json_decode ( $results['body'] );
170 +
145 171 }
146 172
173 +
174 +
147 175 /**
148 176 * Get a user from the GitHub API
149 - *
150 - * @param string $user The username
151 - *
177 + * @param string $user The username
152 178 * @return object The response from the GitHub API
153 179 */
154 - public function get_user( $user ) {
155 - $this->log( "get_user( $user )", GEDEBUG_CALL );
156 - $results = $this->call_api( "https://api.github.com/users/$user" );
180 + public function get_user ( $user ) {
157 181
158 - return json_decode( $results['body'] );
182 + $this->log ( "get_user ( $user )", GEDEBUG_CALL );
183 +
184 + $user = trim ( $user, '/' );
185 + $repository = trim ( $repository, '/' );
186 +
187 + $results = $this->call_api ( "https://api.github.com/users/$user" );
188 +
189 + return json_decode ( $results['body'] );
190 +
159 191 }
192 +
160 193
161 - private function log( $msg, $level ) {
194 +
195 + private function log ( $msg, $level ) {
162 196 if ( GITHUB_API_LEVEL >= $level ) {
163 - error_log( "[GE$level]: " . $msg );
197 + error_log ( "[GE$level]: ".$msg );
164 198 }
165 199 }
166 -}
200 +
201 +
202 +
203 +}