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