WordPress.org

Making WordPress.org

Ticket #2820: 2820.diff

File 2820.diff, 5.4 KB (added by mayukojpn, 4 years ago)

I checked this patch with shortcode. We should improve calling API logic. This calls API many times and I felt very slow.

  • wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php

    diff --git wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php
    index 412b806..0443dd4 100644
    Author: WordPress.org Meta Team 
    88*/
    99
    1010class Official_WordPress_Events {
    11         const EVENTS_TABLE          = 'wporg_events';
    12         const WORDCAMP_API_BASE_URL = 'https://central.wordcamp.org/wp-json/';
    13         const MEETUP_API_BASE_URL   = 'https://api.meetup.com/';
    14         const MEETUP_MEMBER_ID      = 72560962;
     11        const EVENTS_TABLE            = 'wporg_events';
     12        const WORDCAMP_API_BASE_URL   = 'https://central.wordcamp.org/wp-json/';
     13        const MEETUP_API_BASE_URL     = 'https://api.meetup.com/';
     14        const MEETUP_MEMBER_ID        = 72560962;
     15        const DOORKEEPER_API_BASE_URL = 'https://api.doorkeeper.jp/';
    1516
    1617        /*
    1718         * @todo
    class Official_WordPress_Events { 
    121122         */
    122123        public function render_events() {
    123124                $output = '';
    124                 $events = $this->group_events_by_date( $this->get_cached_events() );
     125                $events = $this->group_events_by_date( $this->fetch_upcoming_events() );
    125126
    126127                if ( $events ) {
    127128                        ob_start();
    class Official_WordPress_Events { 
    181182         * @return array
    182183         */
    183184        protected function fetch_upcoming_events() {
    184                 $events = array_merge( $this->get_wordcamp_events(), $this->get_meetup_events() );
     185                $events = array_merge(
     186                        $this->get_wordcamp_events(),
     187                        $this->get_meetup_events(),
     188                        $this->get_jp_doorkeeper_events()
     189                );
     190                //$events = array_merge( $this->get_jp_doorkeeper_events() );
    185191
    186192                return $events;
    187193        }
    class Official_WordPress_Events { 
    390396
    391397        /*
    392398         * Gets the IDs of all of the meetup groups associated
    393          * 
     399         *
    394400         * @return array
    395401         */
    396402        protected function get_meetup_group_ids() {
    class Official_WordPress_Events { 
    427433
    428434                return $group_ids;
    429435        }
     436        /**
     437         * Get WordPress meetups from Doorkeeper API
     438         *
     439         * @return array
     440         */
     441        protected function get_jp_doorkeeper_events() {
     442                $utc_offset = 32400;
     443                $events     = array();
     444                $groups     = array(
     445                        '74',   // WordBench Saitama
     446                        //'2169', // WordBench Kobe
     447                        '2366', // WordBench Chiba
     448                        //'2472', // WordBench Osaka
     449                        '2504', // WordBench Tokyo
     450                        '2555', // WordBench Fukuoka
     451                        '2599', // WordBench Nara
     452                        '2969', // WordBench Wakayama
     453                        '2995', // WordBench Oita
     454                        '3032', // WordBench Kumamoto
     455                        '3129', // WordBench Nagoya
     456                        //'3709', // WordBench Kagoshima
     457                        '4074', // Tokyo WordPress Mokumoku Club
     458                        '4194', // WordBench Fukui
     459                        '4664', // Matsudo WordPress Meetup
     460                        //'6945', // WordBench Yamaguchi
     461                        '6883', // WordPress Contribute Club
     462                        '7040', // WordBench Akita
     463                        '7981', // WordBench Ogijima
     464                        '8885', // WordBench Gifu
     465                );
     466
     467                foreach ( $groups as $group_batch ) {
     468                        $request_url = sprintf(
     469                                '%sevents?group_id=%s&time=0,3m',
     470                                self::DOORKEEPER_API_BASE_URL,
     471                                $group_batch
     472                        );
     473
     474                        $this->log( 'fetching more events from: ' . var_export( $request_url, true ) );
     475
     476                        $response = $this->remote_get( $request_url );
     477                        $body     = json_decode( wp_remote_retrieve_body( $response ) );
     478
     479                        $this->log( 'pruned response - ' . print_r( $this->prune_response_for_log( $response ), true ) );
     480
     481                        if ( ! empty ( $body[0] ) ) {
     482                                $meetups = $body[0];
     483
     484                                foreach ( $meetups as $meetup ) {
     485                                        $start_timestamp = $utc_offset + strtotime( $meetup->starts_at ); // convert to seconds
     486                                        $end_timestamp   = $utc_offset + strtotime( $meetup->ends_at );   // convert to seconds
     487
     488                                        //if ( isset( $meetup->venue ) ) {
     489                                        //      $location = $this->format_meetup_venue_location( $meetup->venue );
     490                                        //} else {
     491                                                $geocoded_location = $this->reverse_geocode( $meetup->lat, $meetup->long );
     492                                                $location_parts    = $this->parse_reverse_geocode_address( $geocoded_location->address_components );
     493                                                $location          = sprintf(
     494                                                        '%s%s%s',
     495                                                        $location_parts['city'],
     496                                                        empty( $location_parts['state'] )        ? '' : ', ' . $location_parts['state'],
     497                                                        empty( $location_parts['country_name'] ) ? '' : ', ' . $location_parts['country_name']
     498                                                );
     499                                        //}
     500
     501                                        if ( ! empty( $meetup->venue->country ) ) {
     502                                                $country_code = $meetup->venue->country;
     503                                        } elseif ( ! empty( $location_parts['country_code'] ) ) {
     504                                                $country_code = $location_parts['country_code'];
     505                                        } else {
     506                                                $country_code = '';
     507                                        }
     508
     509                                        $events[] = new Official_WordPress_Event( array(
     510                                                'type'            => 'meetup',
     511                                                'source_id'       => $meetup->id,
     512                                                'title'           => $meetup->title,
     513                                                'url'             => $meetup->public_url,
     514                                                'meetup_name'     => '',
     515                                                'meetup_url'      => '',
     516                                                'description'     => $meetup->description,
     517                                                'num_attendees'   => $meetup->participants,
     518                                                'start_timestamp' => $start_timestamp,
     519                                                'end_timestamp'   => $end_timestamp,
     520                                                'location'        => $location,
     521                                                'country_code'    => $country_code,
     522                                                'latitude'        => $meetup->lat,
     523                                                'longitude'       => $meetup->long,
     524                                        ) );
     525                                }
     526                        }
     527                }
     528
     529                $this->log( sprintf( 'returning %d events', count( $events ) ) );
     530
     531                return $events;
     532        }
     533
    430534
    431535        /**
    432536         * Reverse-geocodes a set of coordinates