Making WordPress.org

Changeset 8379


Ignore:
Timestamp:
03/01/2019 07:59:55 AM (5 years ago)
Author:
dd32
Message:

WordPress.TV: Add some extra information to the WordPress.TV API to make it more useful for mod tools.
All of the data here is presented on the public page in one form or another.

See #4230.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/wordpresstv-rest.php

    r1024 r8379  
    3131    }
    3232
     33    /**
     34     * Handle API requests.
     35     *
     36     * Supported Endpoints:
     37     * - /api/videos.json
     38     *   Accepts all WP_Query parameters, such as 'event', 'per_page', and 'paged'.
     39     * - /api/events.json
     40     * - /api/speakers.json
     41     * - /api/languages.json
     42     * - /api/tags.json
     43     * - /api/categories.json
     44     *   All above endpoints accept 'paged'.
     45     */
    3346    function template_redirect() {
    3447        global $wp_query, $post, $wptv;
     
    5366                }
    5467
     68                $response['query'] = array(
     69                    'results' => (int) $wp_query->found_posts,
     70                    'pages'   => (int) $wp_query->max_num_pages,
     71                );
     72
    5573                $response['videos'] = array();
    5674                while ( have_posts() ) {
     
    6381                    ob_end_clean();
    6482
    65                     $response['videos'][] = array(
    66                         'title'     => $post->post_title,
    67                         'permalink' => get_permalink( get_the_ID() ),
    68                         'thumbnail' => $thumbnail,
     83                    $video = array(
     84                        'title'       => $post->post_title,
     85                        'permalink'   => get_permalink( get_the_ID() ),
     86                        'thumbnail'   => $thumbnail,
     87                        'date'        => get_the_date(),
     88                        'description' => $post->post_excerpt,
     89                        'slides'      => get_post_meta( $post->ID, '_wptv_slides_url', true ),
     90                        'speakers'    => array(),
     91                        'event'       => array(),
     92                        'language'    => array(),
     93                        'tags'        => array(),
     94                        'category'    => array(),
     95                        'year'        => false,
     96                        'location'    => false,
     97                        'producer'    => array(),
     98                        'video'       => array(
     99                            'mp4' => array(),
     100                            'ogg' => array(),
     101                        )
    69102                    );
     103
     104                    foreach ( [ 'speakers', 'event', 'language', 'tags', 'category' ] as $tax ) {
     105                        $terms = get_the_terms( get_the_ID(), $tax );
     106                        if ( ! $terms || is_wp_error( $terms ) ) {
     107                            continue;
     108                        }
     109                        foreach ( $terms as $t ) {
     110                            // Special Cases
     111                            if ( 'category' == $tax && $t->parent == 91093 /* Year */ ) {
     112                                $video['year'] = $t->name;
     113                                continue;
     114                            } elseif ( 'category' == $tax && $t->parent == 6418 /* Location */ ) {
     115                                $video['location'] = $t->name;
     116                                continue;
     117                            }
     118
     119                            $video[ $tax ][] = array(
     120                                'slug' => $t->slug,
     121                                'name' => $t->name,
     122                                'link' => get_term_link( $t )
     123                            );
     124                        }
     125                    }
     126
     127                    if ( $producer = get_the_terms( get_the_ID(), 'producer' ) ) {
     128                        $video['producer']['name'] = $producer[0]->name;
     129                    }
     130                    if ( $producer_username = get_the_terms( get_the_ID(), 'producer-username' ) ) {
     131                        $video['producer']['username'] = $producer_username[0]->name;
     132                    }
     133
     134                    if ( function_exists( 'find_all_videopress_shortcodes' ) ) {
     135                        $post_videos = array_keys( find_all_videopress_shortcodes( $post->post_content ) );
     136                        if ( $post_videos ) {
     137                            $post_video = video_get_info_by_guid( $post_videos[0] );
     138
     139                            // Ogg
     140                            if ( $link = video_highest_resolution_ogg( $post_video ) ) {
     141                                $video['video']['ogg']['low'] = $link;
     142                            }
     143
     144                            // MP4
     145                            $mp4_formats = array( 'low' => 'fmt_std', 'med' => 'fmt_dvd', 'high' => 'fmt_hd' );
     146                            foreach ( $mp4_formats as $mp4_field => $mp4_format ) {
     147                                if ( $link = video_url_by_format( $post_video, $mp4_format ) ) {
     148                                    $video['video']['mp4'][ $mp4_field ] = $link;
     149                                }
     150                            }
     151                        }
     152                    }
     153
     154                    $response['videos'][] = $video;
     155                }
     156
     157                break;
     158            case 'events':
     159            case 'speakers':
     160            case 'languages':
     161            case 'tags':
     162            case 'categories':
     163                $taxonomies = array(
     164                    'events'     => 'event',
     165                    'speakers'   => 'speakers',
     166                    'languages'  => 'language',
     167                    'tags'       => 'post_tag',
     168                    'categories' => 'category',
     169                );
     170
     171                $taxonomy = $taxonomies[ $method ];
     172                $taxonomy_obj = get_taxonomy( $taxonomy );
     173                $total_count = wp_count_terms( $taxonomy, array( 'hide_empty    ' => true ) );
     174
     175                $page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
     176                $per_page = 200;
     177
     178                $terms = get_terms( array(
     179                    'taxonomy'   => $taxonomy,
     180                    'hide_empty' => true,
     181                    'number'     => $per_page,
     182                    'offset'     => $per_page * ($page - 1),
     183                    'orderby'    => 'id',
     184                    'order'      => 'DESC',
     185                ) );
     186
     187                $response['query'] = array(
     188                    'results' => (int) $total_count,
     189                    'page'    => $page,
     190                    'pages'   => ceil( $total_count / $per_page ),
     191                );
     192
     193                $response[ $method ] = array();
     194                foreach ( $terms as $t ) {
     195                    $item = array(
     196                        'name' => $t->name,
     197                        'link' => get_term_link( $t ),
     198                        'api'  => add_query_arg( $taxonomy_obj->query_var, $t->slug, home_url( '/api/videos.json') ),
     199                        'videos' => $t->count,
     200                    );
     201
     202                    if ( 'event' == $t->taxonomy ) {
     203                        $item['youtube_playlist_id'] = get_option( "term_meta_{$t->term_id}_youtube_playlist_id", '' );
     204                        $item['hashtag'] = get_option( "term_meta_{$t->term_id}_hashtag", '' );
     205                    }
     206
     207                    $response[ $method ][] = $item;
    70208                }
    71209
Note: See TracChangeset for help on using the changeset viewer.