Home Forums Basel support forum Instagram gallery – Showing photos by # instead by username

Instagram gallery – Showing photos by # instead by username

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #47614

    Estefania
    Participant

    I am very sorry, but I have to star again this topic:(
    Today I have updated Basel theme to V4.
    It looks like everything were fine with this Instagram gallery. It showed photos by username.
    But this afternoon, the gallery was changed again, showing photos by #.

    2 questions:
    – have I to leave the code you gave to us in the functions.php in child-theme?
    – Is there a king of time for update photos from Instagram?

    Thanks a lot in advance!
    Estefanía.

    Code:
    /* Update theme API Instagram*/
    function basel_scrape_instagram( $username, $slice = 9 ) {
    $username = strtolower( $username );
    $by_hashtag = ( substr( $username, 0, 1 ) == ‘#’ );
    $transient_name = ‘instagram-media-new1-‘ . sanitize_title_with_dashes( $username );
    $instagram = get_transient( $transient_name );

    if ( false === $instagram ) {

    $request_param = ( $by_hashtag ) ? ‘explore/tags/’ . substr( $username, 1) : trim( $username );
    $remote = wp_remote_get( ‘https://instagram.com/’. $request_param );

    if ( is_wp_error( $remote ) ) {
    return new WP_Error( ‘site_down’, esc_html__( ‘Unable to communicate with Instagram.’, ‘basel’ ) );
    }

    if ( 200 != wp_remote_retrieve_response_code( $remote ) ) {
    return new WP_Error( ‘invalid_response’, esc_html__( ‘Instagram did not return a 200.’, ‘basel’ ) );
    }

    $shards = explode( ‘window._sharedData = ‘, $remote[‘body’] );
    $insta_json = explode( ‘;</script>’, $shards[1] );
    $insta_array = json_decode( $insta_json[0], TRUE );

    if ( ! $insta_array ){
    return new WP_Error( ‘bad_json’, esc_html__( ‘Instagram has returned invalid data.’, ‘basel’ ) );
    }

    if ( isset( $insta_array[‘entry_data’][‘ProfilePage’][0][‘graphql’][‘user’][‘edge_owner_to_timeline_media’][‘edges’] ) ) {
    $images = $insta_array[‘entry_data’][‘ProfilePage’][0][‘graphql’][‘user’][‘edge_owner_to_timeline_media’][‘edges’];
    } elseif( $by_hashtag && isset( $insta_array[‘entry_data’][‘TagPage’][0][‘graphql’][‘hashtag’][‘edge_hashtag_to_media’][‘edges’] ) ) {
    $images = $insta_array[‘entry_data’][‘TagPage’][0][‘graphql’][‘hashtag’][‘edge_hashtag_to_media’][‘edges’];
    } else {
    return new WP_Error( ‘bad_json_2’, esc_html__( ‘Instagram has returned invalid data.’, ‘basel’ ) );
    }

    if ( ! is_array( $images ) ) {
    return new WP_Error( ‘bad_array’, esc_html__( ‘Instagram has returned invalid data.’, ‘basel’ ) );
    }

    $instagram = array();

    foreach ( $images as $image ) {
    $image = $image[‘node’];
    $caption = esc_html__( ‘Instagram Image’, ‘basel’ );
    if ( ! empty( $image[‘edge_media_to_caption’][‘edges’][0][‘node’][‘text’] ) ) $caption = $image[‘edge_media_to_caption’][‘edges’][0][‘node’][‘text’];

    $image[‘thumbnail_src’] = preg_replace( “/^https:/i”, “”, $image[‘thumbnail_src’] );
    $image[‘thumbnail’] = preg_replace( “/^https:/i”, “”, $image[‘thumbnail_resources’][0][‘src’] );
    $image[‘medium’] = preg_replace( “/^https:/i”, “”, $image[‘thumbnail_resources’][2][‘src’] );
    $image[‘large’] = $image[‘thumbnail_src’];

    $type = ( $image[‘is_video’] ) ? ‘video’ : ‘image’;

    $instagram[] = array(
    ‘description’ => $caption,
    ‘link’ => ‘//instagram.com/p/’ . $image[‘shortcode’],
    ‘comments’ => $image[‘edge_media_to_comment’][‘count’],
    ‘likes’ => $image[‘edge_liked_by’][‘count’],
    ‘thumbnail’ => $image[‘thumbnail’],
    ‘medium’ => $image[‘medium’],
    ‘large’ => $image[‘large’],
    ‘type’ => $type
    );
    }

    // do not set an empty transient – should help catch private or empty accounts
    if ( ! empty( $instagram ) ) {
    $instagram = base64_encode( maybe_serialize( $instagram ) );
    set_transient( $transient_name, $instagram, apply_filters( ‘null_instagram_cache_time’, HOUR_IN_SECONDS * 2 ) );
    }
    }
    if ( ! empty( $instagram ) ) {
    $instagram = maybe_unserialize( base64_decode( $instagram ) );
    return array_slice( $instagram, 0, $slice );
    } else {
    return new WP_Error( ‘no_images’, esc_html__( ‘Instagram did not return any images.’, ‘basel’ ) );
    }
    }

    Attachments:
    You must be logged in to view attached files.
    #47702

    Artem Temos
    Keymaster

    Hi,

    Please, describe us your problem in a bit more details. Attach some screenshots and provide us a list of steps how to reproduce it on your website.

    Thank you in advance.

Viewing 2 posts - 1 through 2 (of 2 total)