Changeset 7751
- Timestamp:
- 10/19/2018 09:04:34 PM (6 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events
- Property svn:externals set to
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php
r7749 r7751 7 7 Author: WordPress.org Meta Team 8 8 */ 9 10 use WordCamp\Utilities\Meetup_Client; 9 11 10 12 class Official_WordPress_Events { … … 318 320 $events = array(); 319 321 320 if ( ! defined( 'MEETUP_API_KEY' ) || ! MEETUP_API_KEY || ! $groups = $this->get_meetup_group_ids() ) { 322 require_once( __DIR__ . '/class-meetup-client.php' ); 323 324 $client = new Meetup_Client(); 325 if ( ! empty( $client->error->errors ) ) { 326 $this->log( 'Failed to instantiate meetup client: ' . wp_json_encode( $client->error ), true ); 321 327 return $events; 322 328 } 323 329 324 // Meetup API sometimes throws an error with chunk size larger than 50. 325 $groups = array_chunk( $groups, 50, true ); 326 327 foreach ( $groups as $group_batch ) { 328 $request_url = add_query_arg( 329 array( 330 'group_id' => implode( ',', $group_batch ), 331 'time' => '0,3m', 332 'page' => 200, 333 'status' => 'upcoming,cancelled', 334 ), 335 self::MEETUP_API_BASE_URL . '2/events' 336 ); 337 338 while ( ! empty( $request_url ) ) { 339 // The "next" URLs returned by the API need to be re-signed. 340 $request_url = add_query_arg( 341 array( 342 'sign' => true, 343 'key' => MEETUP_API_KEY, 344 ), 345 $request_url 346 ); 347 348 $this->log( 'fetching more events from: ' . var_export( $request_url, true ) ); 349 350 $response = $this->remote_get( $request_url ); 351 $body = json_decode( wp_remote_retrieve_body( $response ) ); 352 353 $this->log( 'pruned response - ' . print_r( $this->prune_response_for_log( $response ), true ) ); 354 355 if ( ! empty ( $body->results ) ) { 356 $meetups = $body->results; 330 $groups = $client->get_groups(); 331 if ( ! empty( $client->error->errors ) ) { 332 $this->log( 'Failed to fetch groups: ' . wp_json_encode( $client->error ), true ); 333 return $events; 334 } 335 336 $meetups = $client->get_events( wp_list_pluck( $groups, 'id' ) ); 337 if ( ! empty( $client->error->errors ) ) { 338 $this->log( 'Failed to fetch meetups: ' . wp_json_encode( $client->error ), true ); 339 return $events; 340 } 357 341 358 342 foreach ( $meetups as $meetup ) { 359 $start_timestamp = ( $meetup->time / 1000 ) + ( $meetup->utc_offset / 1000 ); // convert to seconds 360 361 if ( isset( $meetup->venue ) ) { 362 $location = $this->format_meetup_venue_location( $meetup->venue ); 343 if ( empty( $meetup['id'] ) || empty( $meetup['name'] ) ) { 344 $this->log( 'Malformed meetup: ' . wp_json_encode( $meetup ) ); 345 continue; 346 } 347 348 $start_timestamp = ( $meetup['time'] / 1000 ) + ( $meetup['utc_offset'] / 1000 ); // convert to seconds 349 350 if ( isset( $meetup['venue'] ) ) { 351 $location = $this->format_meetup_venue_location( $meetup['venue'] ); 363 352 } else { 364 $geocoded_location = $this->reverse_geocode( $meetup ->group->group_lat, $meetup->group->group_lon);353 $geocoded_location = $this->reverse_geocode( $meetup['group']['group_lat'], $meetup['group']['group_lon'] ); 365 354 $location_parts = $this->parse_reverse_geocode_address( $geocoded_location ); 366 355 $location = sprintf( 367 356 '%s%s%s', 368 $location_parts['city'] ,357 $location_parts['city'] ?? '', 369 358 empty( $location_parts['state'] ) ? '' : ', ' . $location_parts['state'], 370 359 empty( $location_parts['country_name'] ) ? '' : ', ' . $location_parts['country_name'] … … 373 362 } 374 363 375 if ( ! empty( $meetup ->venue->country) ) {376 $country_code = $meetup ->venue->country;364 if ( ! empty( $meetup['venue']['country'] ) ) { 365 $country_code = $meetup['venue']['country']; 377 366 } elseif ( ! empty( $location_parts['country_code'] ) ) { 378 367 $country_code = $location_parts['country_code']; … … 383 372 $events[] = new Official_WordPress_Event( array( 384 373 'type' => 'meetup', 385 'source_id' => $meetup ->id,386 'status' => 'upcoming' === $meetup ->status? 'scheduled' : 'cancelled',387 'title' => $meetup ->name,388 'url' => $meetup ->event_url,389 'meetup_name' => $meetup ->group->name,390 'meetup_url' => sprintf( 'https://www.meetup.com/%s/', $meetup ->group->urlname),391 'description' => $meetup ->description,392 'num_attendees' => $meetup ->yes_rsvp_count,374 'source_id' => $meetup['id'], 375 'status' => 'upcoming' === $meetup['status'] ? 'scheduled' : 'cancelled', 376 'title' => $meetup['name'], 377 'url' => $meetup['event_url'], 378 'meetup_name' => $meetup['group']['name'], 379 'meetup_url' => sprintf( 'https://www.meetup.com/%s/', $meetup['group']['urlname'] ), 380 'description' => $meetup['description'] ?? '', 381 'num_attendees' => $meetup['yes_rsvp_count'], 393 382 'start_timestamp' => $start_timestamp, 394 'end_timestamp' => ( empty ( $meetup ->duration ) ? $start_timestamp : $start_timestamp + ( $meetup->duration/ 1000 ) ), // convert to seconds383 'end_timestamp' => ( empty ( $meetup['duration'] ) ? $start_timestamp : $start_timestamp + ( $meetup['duration'] / 1000 ) ), // convert to seconds 395 384 'location' => $location, 396 385 'country_code' => $country_code, 397 'latitude' => empty( $meetup ->venue->lat ) ? $meetup->group->group_lat : $meetup->venue->lat,398 'longitude' => empty( $meetup ->venue->lon ) ? $meetup->group->group_lon : $meetup->venue->lon,386 'latitude' => empty( $meetup['venue']['lat'] ) ? $meetup['group']['group_lat'] : $meetup['venue']['lat'], 387 'longitude' => empty( $meetup['venue']['lon'] ) ? $meetup['group']['group_lon'] : $meetup['venue']['lon'], 399 388 ) ); 400 389 } 401 }402 403 $request_url = isset( $body->meta->next ) ? esc_url_raw( $body->meta->next ) : null;404 }405 }406 390 407 391 $this->log( sprintf( 'returning %d events', count( $events ) ) ); 408 392 409 393 return $events; 410 }411 412 /*413 * Gets the IDs of all of the meetup groups associated414 *415 * @return array416 */417 protected function get_meetup_group_ids() {418 $group_ids = array();419 420 if ( ! defined( 'MEETUP_API_KEY' ) || ! MEETUP_API_KEY ) {421 return $group_ids;422 }423 424 $request_url = sprintf(425 '%s2/profiles?&member_id=%d&key=%s',426 self::MEETUP_API_BASE_URL,427 self::MEETUP_MEMBER_ID,428 MEETUP_API_KEY429 );430 431 while ( ! empty( $request_url ) ) {432 $this->log( 'fetching more groups from: ' . var_export( $request_url, true ) );433 434 $response = $this->remote_get( $request_url );435 $body = json_decode( wp_remote_retrieve_body( $response ) );436 437 $this->log( 'pruned response - ' . print_r( $this->prune_response_for_log( $response ), true ) );438 439 if ( ! empty ( $body->results ) ) {440 foreach ( $body->results as $profile ) {441 if ( ! isset( $profile->group->id, $profile->role ) || 'Organizer' !== $profile->role ) {442 continue;443 }444 445 $group_ids[] = $profile->group->id;446 }447 }448 449 $request_url = isset( $body->meta->next ) ? $body->meta->next : null;450 }451 452 $this->log( sprintf( 'returning %d groups', count( $group_ids ) ) );453 454 return $group_ids;455 394 } 456 395 … … 539 478 540 479 foreach ( array( 'city', 'state', 'localized_country_name' ) as $part ) { 541 if ( ! empty( $venue ->$part) ) {480 if ( ! empty( $venue[ $part ] ) ) { 542 481 if ( in_array( $part, array( 'state' ) ) ) { 543 $location[] = strtoupper( $venue ->$part);482 $location[] = strtoupper( $venue[ $part ] ); 544 483 } else { 545 $location[] = $venue ->$part;484 $location[] = $venue[ $part ]; 546 485 } 547 486 } … … 734 673 * 735 674 * @param string $message 736 */ 737 protected function log( $message ) { 675 * @param bool $write_to_disk If true, writes the message to the standard error log in addition to the 676 * `owpe_log` option. 677 */ 678 protected function log( $message, $write_to_disk = false ) { 738 679 $limit = 500; 680 $api_keys = array( MEETUP_API_KEY, OFFICIAL_WP_EVENTS_GOOGLE_MAPS_API_KEY ); 681 682 if ( $write_to_disk ) { 683 error_log( sprintf( 684 /* 685 * Use the folder name as a prefix so that Slack searches/highlights will match this and log 686 * entries generated by PHP itself. 687 */ 688 'official-wordpress-events: %s', 689 str_replace( $api_keys, '[redacted]', $message ) 690 ) ); 691 } 739 692 740 693 if ( ! isset( $this->log ) ) {
Note: See TracChangeset
for help on using the changeset viewer.