]> CyberLeo.Net >> Repos - Github/YOURLS.git/blob - includes/functions-api.php
No translation readyness for API functions, but that's OK
[Github/YOURLS.git] / includes / functions-api.php
1 <?php\r
2 /*\r
3  * YOURLS\r
4  * Functions for the API\r
5  *\r
6  * Note about translation : this file should NOT be translation ready\r
7  * API messages and returns are supposed to be programmatically tested, so default English is expected\r
8  *\r
9  */\r
10 \r
11 /**\r
12  * API function wrapper: Shorten a URL\r
13  *\r
14  * @since 1.6\r
15  * @return array Result of API call\r
16  */\r
17 function yourls_api_action_shorturl() {\r
18         $url = ( isset( $_REQUEST['url'] ) ? $_REQUEST['url'] : '' );\r
19         $keyword = ( isset( $_REQUEST['keyword'] ) ? $_REQUEST['keyword'] : '' );\r
20         $title = ( isset( $_REQUEST['title'] ) ? $_REQUEST['title'] : '' );\r
21         $return = yourls_add_new_link( $url, $keyword, $title );\r
22         $return['simple'] = ( isset( $return['shorturl'] ) ? $return['shorturl'] : '' ); // This one will be used in case output mode is 'simple'\r
23         unset( $return['html'] ); // in API mode, no need for our internal HTML output\r
24         return yourls_apply_filter( 'api_result_shorturl', $return );\r
25 }\r
26 \r
27 /**\r
28  * API function wrapper: Stats about links (XX top, bottom, last, rand)\r
29  *\r
30  * @since 1.6\r
31  * @return array Result of API call\r
32  */\r
33 function yourls_api_action_stats() {\r
34         $filter = ( isset( $_REQUEST['filter'] ) ? $_REQUEST['filter'] : '' );\r
35         $limit = ( isset( $_REQUEST['limit'] ) ? $_REQUEST['limit'] : '' );\r
36         $start = ( isset( $_REQUEST['start'] ) ? $_REQUEST['start'] : '' );\r
37         return yourls_apply_filter( 'api_result_stats', yourls_api_stats( $filter, $limit, $start ) );\r
38 }\r
39 \r
40 /**\r
41  * API function wrapper: Just the global counts of shorturls and clicks\r
42  *\r
43  * @since 1.6\r
44  * @return array Result of API call\r
45  */\r
46 function yourls_api_action_db_stats() {\r
47         return yourls_apply_filter( 'api_result_db_stats', yourls_api_db_stats() );\r
48 }\r
49 \r
50 /**\r
51  * API function wrapper: Stats for a shorturl\r
52  *\r
53  * @since 1.6\r
54  * @return array Result of API call\r
55  */\r
56 function yourls_api_action_url_stats() {\r
57         $shorturl = ( isset( $_REQUEST['shorturl'] ) ? $_REQUEST['shorturl'] : '' );\r
58         return yourls_apply_filter( 'api_result_url_stats', yourls_api_url_stats( $shorturl ) );\r
59 }\r
60 \r
61 /**\r
62  * API function wrapper: Expand a short link\r
63  *\r
64  * @since 1.6\r
65  * @return array Result of API call\r
66  */\r
67 function yourls_api_action_expand() {\r
68         $shorturl = ( isset( $_REQUEST['shorturl'] ) ? $_REQUEST['shorturl'] : '' );\r
69         return yourls_apply_filter( 'api_result_expand', yourls_api_expand( $shorturl ) );\r
70 }\r
71 \r
72 /**\r
73  * API function wrapper: return version numbers\r
74  *\r
75  * @since 1.6\r
76  * @return array Result of API call\r
77  */\r
78 function yourls_api_action_version() {\r
79         $return['version'] = $return['simple'] = YOURLS_VERSION;\r
80         if( isset( $_REQUEST['db'] ) && $_REQUEST['db'] == 1 )\r
81                 $return['db_version'] = YOURLS_DB_VERSION;\r
82         return yourls_apply_filter( 'api_result_version', $return );\r
83 }\r
84  \r
85 // Return API result. Dies after this\r
86 function yourls_api_output( $mode, $return ) {\r
87         if( isset( $return['simple'] ) ) {\r
88                 $simple = $return['simple'];\r
89                 unset( $return['simple'] );\r
90         }\r
91         \r
92         yourls_do_action( 'pre_api_output', $mode, $return );\r
93         \r
94         if( isset( $return['statusCode'] ) ) {\r
95                 $code = $return['statusCode'];\r
96         } elseif ( isset( $return['errorCode'] ) ) {\r
97                 $code = $return['errorCode'];\r
98         } else {\r
99                 $code = 200;\r
100         }\r
101         yourls_status_header( $code );\r
102         \r
103         switch ( $mode ) {\r
104                 case 'jsonp':\r
105                         header( 'Content-type: application/javascript' );\r
106                         echo $return['callback'] . '(' . json_encode( $return ) . ')';\r
107                         break;\r
108     \r
109                 case 'json':\r
110                         header( 'Content-type: application/json' );\r
111                         echo json_encode( $return );\r
112                         break;\r
113                 \r
114                 case 'xml':\r
115                         header( 'Content-type: application/xml' );\r
116                         echo yourls_xml_encode( $return );\r
117                         break;\r
118                         \r
119                 case 'simple':\r
120                 default:\r
121                         if( isset( $simple ) )\r
122                                 echo $simple;\r
123                         break;\r
124         }\r
125 \r
126         yourls_do_action( 'api_output', $mode, $return );\r
127         \r
128         die();\r
129 }\r
130 \r
131 // Return array for API stat requests\r
132 function yourls_api_stats( $filter = 'top', $limit = 10, $start = 0 ) {\r
133         $return = yourls_get_stats( $filter, $limit, $start );\r
134         $return['simple']  = 'Need either XML or JSON format for stats';\r
135         $return['message'] = 'success';\r
136         return yourls_apply_filter( 'api_stats', $return, $filter, $limit, $start );\r
137 }\r
138 \r
139 // Return array for counts of shorturls and clicks\r
140 function yourls_api_db_stats() {\r
141         $return = array(\r
142                 'db-stats'   => yourls_get_db_stats(),\r
143                 'statusCode' => 200,\r
144                 'simple'     => 'Need either XML or JSON format for stats',\r
145                 'message'    => 'success',\r
146         );\r
147                 \r
148         return yourls_apply_filter( 'api_db_stats', $return );\r
149 }\r
150 \r
151 // Return array for API stat requests\r
152 function yourls_api_url_stats( $shorturl ) {\r
153         $keyword = str_replace( YOURLS_SITE . '/' , '', $shorturl ); // accept either 'http://ozh.in/abc' or 'abc'\r
154         $keyword = yourls_sanitize_string( $keyword );\r
155 \r
156         $return = yourls_get_link_stats( $keyword );\r
157         $return['simple']  = 'Need either XML or JSON format for stats';\r
158         return yourls_apply_filter( 'api_url_stats', $return, $shorturl );\r
159 }\r
160 \r
161 // Expand short url to long url\r
162 function yourls_api_expand( $shorturl ) {\r
163         $keyword = str_replace( YOURLS_SITE . '/' , '', $shorturl ); // accept either 'http://ozh.in/abc' or 'abc'\r
164         $keyword = yourls_sanitize_string( $keyword );\r
165         \r
166         $longurl = yourls_get_keyword_longurl( $keyword );\r
167         \r
168         if( $longurl ) {\r
169                 $return = array(\r
170                         'keyword'   => $keyword,\r
171                         'shorturl'  => YOURLS_SITE . "/$keyword",\r
172                         'longurl'   => $longurl,\r
173                         'simple'    => $longurl,\r
174                         'message'   => 'success',\r
175                         'statusCode' => 200,\r
176                 );\r
177         } else {\r
178                 $return = array(\r
179                         'keyword'   => $keyword,\r
180                         'simple'    => 'not found',\r
181                         'message'   => 'Error: short URL not found',\r
182                         'errorCode' => 404,\r
183                 );\r
184         }\r
185         \r
186         return yourls_apply_filter( 'api_expand', $return, $shorturl );\r
187 }\r