PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /home/trave494/demo2024feb.kerihosting.com/wp-content/plugins/wp-automatic/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : /home/trave494/demo2024feb.kerihosting.com/wp-content/plugins/wp-automatic/core.youtube.php |
<?php // Main Class require_once 'core.php'; class WpAutomaticYoutube extends wp_automatic { /* * ---* youtube get links --- */ function youtube_fetch_links($keyword, $camp) { echo "<br>so I should now get some links from youtube for keyword :" . $keyword; // check if there is an api key added $wp_automatic_yt_tocken = trim ( wp_automatic_single_item ( 'wp_automatic_yt_tocken', '' ) ); if (trim ( $wp_automatic_yt_tocken ) == '') { echo '<br>Youtube API key is required, please visit settings page and add it'; return false; } // ini options $camp_opt = unserialize ( $camp->camp_options ); if (stristr ( $camp->camp_general, 'a:' )) $camp->camp_general = base64_encode ( $camp->camp_general ); $camp_general = unserialize ( base64_decode ( $camp->camp_general ) ); $camp_general = array_map ( 'wp_automatic_stripslashes', $camp_general ); $sortby = $camp->camp_youtube_order; $camp_youtube_category = $camp->camp_youtube_cat; // get start-index for this keyword $query = "select keyword_start ,keyword_id from {$this->wp_prefix}automatic_keywords where keyword_name='$keyword' and keyword_camp={$camp->camp_id}"; $rows = $this->db->get_results ( $query ); $row = $rows [0]; $kid = $row->keyword_id; $start = $row->keyword_start; if ($start == 0) $start = 1; if ($start == - 1) { echo '<- exhausted keyword'; // check if it is reactivated or still deactivated if ($this->is_deactivated ( $camp->camp_id, $keyword )) { $start = 1; } else { // still deactivated return false; } } // limit check $this->is_allowed_to_call (); echo ' index:' . $start; // update start index to start+50 if (! in_array ( 'OPT_YT_CACHE', $camp_opt )) { echo '<br>Caching is not enabled setting youtube page to query to 1'; $nextstart = 1; } else { $nextstart = $start + 50; } $query = "update {$this->wp_prefix}automatic_keywords set keyword_start = $nextstart where keyword_id=$kid "; $this->db->query ( $query ); // get items $orderby = $camp->camp_youtube_order; $cat = $camp->camp_youtube_cat; if ($cat != 'All') $criteria .= '&category=' . $cat; // base url $search_url = "https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&key=" . trim ( $wp_automatic_yt_tocken ) . "&maxResults=50"; $naked_search_url = $search_url; // minimal version of the search query // keyword add if (trim ( $keyword ) != '*') { $search_url = $search_url . '&q=' . urlencode ( trim ( $keyword ) ); } if (in_array ( 'OPT_YT_DATE', $camp_opt )) { //if OPT_YT_DATE_T is set then generate a date based on the current date minus the minutes otherwise, use the date set if(in_array ( 'OPT_YT_DATE_T', $camp_opt )){ $minutes = $camp_general ['cg_yt_dte_minutes']; $minutes = intval($minutes); $now = time(); $now = $now - ($minutes * 60); //format the date to RFC 3339 format $formatedDate = date('Y-m-d\TH:i:s\Z',$now); $beforeDate = $date = $formatedDate; //report date echo '<br>Using date: '.$date; }else{ $date = $camp_general ['cg_yt_dte_year'] . "-" . $camp_general ['cg_yt_dte_month'] . "-" . $camp_general ['cg_yt_dte_day']; $beforeDate = $date . 'T00:00:00Z'; } $search_url .= "&publishedAfter=" . $beforeDate; } // published before if (in_array ( 'OPT_YT_BEFORE', $camp_opt )) { if (stristr ( $camp_general ['cg_yt_before'], '-' )) { $search_url .= "&publishedBefore=" . trim ( $camp_general ['cg_yt_before'] ) . 'T00:00:00Z'; } } // OPT_YT_LIMIT_EMBED if (in_array ( 'OPT_YT_LIMIT_EMBED', $camp_opt )) { $search_url .= "&videoEmbeddable=true"; } // license $cg_yt_license = $camp_general ['cg_yt_license']; if (trim ( $cg_yt_license ) != '' && $cg_yt_license != 'any') { $search_url .= "&videoLicense=" . $cg_yt_license; } // cg_yt_type $cg_yt_type = $camp_general ['cg_yt_type']; if (trim ( $cg_yt_type ) != '' && $cg_yt_type != 'any') { $search_url .= "&videoType=" . $cg_yt_type; } // videoDuration $cg_yt_duration = $camp_general ['cg_yt_duration']; if (trim ( $cg_yt_duration ) != '' && $cg_yt_duration != 'any') { $search_url .= "&videoDuration=" . $cg_yt_duration; } // videoDefinition $cg_yt_definition = $camp_general ['cg_yt_definition']; if (trim ( $cg_yt_definition ) != '' && $cg_yt_definition != 'any') { $search_url .= "&videoDefinition=" . $cg_yt_definition; } // safeSearch $cg_yt_safe = $camp_general ['cg_yt_safe']; if (trim ( $cg_yt_safe ) != '' && $cg_yt_safe != 'moderate') { $search_url .= "&safeSearch=" . $cg_yt_safe; } // order $camp_youtube_order = $camp->camp_youtube_order; if (trim ( $camp_youtube_order ) == 'published') $camp_youtube_order = 'date'; if ($camp_youtube_order != 'relevance') $search_url .= "&order=" . $camp_youtube_order; // videoCategoryId $videoCategoryId = $camp->camp_youtube_cat; if (trim ( $videoCategoryId ) != 'All' && is_numeric ( $videoCategoryId )) { $search_url .= "&videoCategoryId=" . $videoCategoryId; } // regionCode if (in_array ( 'OPT_YT_LIMIT_CTRY', $camp_opt ) && trim ( $camp_general ['cg_yt_ctr'] ) != '') { $search_url .= "®ionCode=" . trim ( $camp_general ['cg_yt_ctr'] ); } // relevanceLanguage if (in_array ( 'OPT_YT_LIMIT_LANG', $camp_opt ) && trim ( $camp_general ['cg_yt_lang'] ) != '') { $search_url .= "&relevanceLanguage=" . trim ( $camp_general ['cg_yt_lang'] ); } if (in_array ( 'OPT_YT_USER', $camp_opt )) { echo '<br>Fetching vids for specific User/Channel ' . $camp->camp_yt_user; $camp_yt_user = trim ( $camp->camp_yt_user ); //https://www.youtube.com/channel/UCRrW0ddrbFnJCbyZqHHv4KQ if( stristr( $camp_yt_user , 'https' ) && stristr($camp_yt_user, '/channel') ){ $camp_yt_user = trim(str_replace('https://www.youtube.com/channel/', '', $camp_yt_user)); $camp_yt_user = str_replace('/' , '' , $camp_yt_user ) ; } //https://www.youtube.com/c/HolyCulture if( stristr( $camp_yt_user , 'https' ) ){ $camp_yt_user = $this->get_channel_id_foruser($camp_yt_user , $wp_automatic_yt_tocken); } // playlistify it to decrease used quote as normal search quote is 100 but playlist is 2 or if ( ! in_array ( 'OPT_YT_LIVE_ONLY', $camp_opt ) && ! in_array ( 'OPT_YT_LIVE_SKIP', $camp_opt ) && ! in_array ( 'OPT_YT_PLAYLIST', $camp_opt ) && ($search_url == $naked_search_url || $search_url == $naked_search_url . '&order=date')) { // lets playlistify echo '<br>Playlistifying....'; $channel_playlist_key_name = 'wp_automatic_playlist_id_' . md5 ( trim ( $camp_yt_user ) ); $channel_playlist_id = get_post_meta ( $camp->camp_id, $channel_playlist_key_name, true ); // grab playlist ID for firt time if (trim ( $channel_playlist_id ) == '') { // get the ID from YT for first time $playlist_api_url = "https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=" . $camp_yt_user . "&key=" . $wp_automatic_yt_tocken; echo '<br>Getting Playlist ID of this channel...'; // curl get curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $playlist_api_url ) ); $exec = curl_exec ( $this->ch ); if (stristr ( $exec, '{' )) { $json_reply = json_decode ( $exec ); if (isset ( $json_reply->items ) && isset ( $json_reply->items [0] )) { $channel_playlist_id = $json_reply->items [0]->contentDetails->relatedPlaylists->uploads; echo '<- found:' . $channel_playlist_id; update_post_meta ( $camp->camp_id, $channel_playlist_key_name, $channel_playlist_id ); } } } // first playlist if (trim ( $channel_playlist_id ) != '') { // nice we have the uploads playlist lets playlistify now $camp_opt [] = 'OPT_YT_PLAYLIST'; $camp_general ['cg_yt_playlist'] = $channel_playlist_id; } } $search_url .= "&channelId=" . ($camp_yt_user); } elseif (in_array ( 'YT_ID', $camp_opt )) { // post by ID $search_url = 'https://www.googleapis.com/youtube/v3/videos?key=' . $wp_automatic_yt_tocken . '&part=snippet&id=' . urlencode ( trim ( $keyword ) ); } else { // no user just search } // check if playlist if (in_array ( 'OPT_YT_PLAYLIST', $camp_opt )) { echo '<br>Specific Playlist:' . $camp_general ['cg_yt_playlist']; $part = "snippet"; if (in_array ( 'OPT_YT_DATE', $camp_opt )) { $part = "snippet,contentDetails"; } //playlist id $playlistID = trim ( $camp_general ['cg_yt_playlist'] ); //if playlistID contains a playlist url, convert it to a playlist id if( stristr($playlistID , 'https://www.youtube.com/playlist?list=') ){ $playlistID = str_replace('https://www.youtube.com/playlist?list=' , '' , $playlistID); //remove any other params $playlistID = explode('&' , $playlistID); $playlistID = $playlistID[0]; echo '<br>Converted playlist url to id:' . $playlistID; } $search_url = "https://www.googleapis.com/youtube/v3/playlistItems?part={$part}&playlistId=" . $playlistID . "&key=" . trim ( $wp_automatic_yt_tocken ) . "&maxResults=50"; } // check nextpagetoken $tokenName = 'wp_automatic_yt_nt_' . md5 ( $keyword ); $nextPageToken = get_post_meta ( $camp->camp_id, 'wp_automatic_yt_nt_' . md5 ( $keyword ), true ); if (in_array ( 'OPT_YT_CACHE', $camp_opt )) { if (trim ( $nextPageToken ) != '') { echo '<br>nextPageToken:' . $nextPageToken; $search_url .= '&pageToken=' . $nextPageToken; } else { echo '<br>No page token let it the first page'; } } //live only OPT_YT_LIVE_ONLY if (in_array ( 'OPT_YT_LIVE_ONLY', $camp_opt )) { $search_url .= '&eventType=live'; } //CC videoCaption only if (in_array ( 'OPT_YT_CC', $camp_opt )) { $search_url .= '&videoCaption=closedCaption'; } echo '<br>Search URL:' . $search_url; // process request curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $search_url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); // verify reply if (! stristr ( $exec, '"kind"' )) { //remove broken token if( stristr($exec, 'location": "pageToken') ){ echo '<br>Token seems to be defected, removing it....'; delete_post_meta ( $camp->camp_id, $tokenName ); } //if { "error exists, decode json and display error in red if(stristr($exec, '"error"')){ $json_error = json_decode($exec); echo '<br><span style="color:red">Youtube Error: '.$json_error->error->message.'</span>'; }else{ echo '<br>Not valid reply from Youtube:' . $exec . $x; } return false; } $json_exec = json_decode ( $exec ); // check nextpage token if (isset ( $json_exec->nextPageToken ) && trim ( $json_exec->nextPageToken ) != '') { $newnextPageToken = $json_exec->nextPageToken; echo '<br>New page token:' . $newnextPageToken; update_post_meta ( $camp->camp_id, 'wp_automatic_yt_nt_' . md5 ( $keyword ), $newnextPageToken ); } else { // delete the token echo '<br>No next page token'; delete_post_meta ( $camp->camp_id, 'wp_automatic_yt_nt_' . md5 ( $keyword ) ); // set start to -1 exhausted $query = "update {$this->wp_prefix}automatic_keywords set keyword_start = -1 where keyword_id=$kid"; $this->db->query ( $query ); // deactivate for 60 minutes if (! in_array ( 'OPT_NO_DEACTIVATE', $camp_opt )) { if (! in_array ( 'YT_ID', $camp_opt )) { $this->deactivate_key ( $camp->camp_id, $keyword ); } else { $this->deactivate_key ( $camp->camp_id, $keyword, 0 ); } } } // get items $search = array (); $search = $json_exec->items; // disable keyword if no new items if (count ( $search ) == 0) { echo '<br>No more vids for this keyword deactivating it ..'; $query = "update {$this->wp_prefix}automatic_keywords set keyword_start = -1 where keyword_id=$kid"; $this->db->query ( $query ); // deleting nextpage token delete_post_meta ( $camp->camp_id, 'wp_automatic_yt_nt_' . md5 ( $keyword ) ); // deactivate for 60 minutes if (! in_array ( 'OPT_NO_DEACTIVATE', $camp_opt )) $this->deactivate_key ( $camp->camp_id, $keyword ); return; } echo '<ol>'; // reversing? if (in_array ( 'OPT_YT_REVERSE', $camp_opt )) { echo '<br>Reversing vids list order.'; $search = array_reverse ( $search ); } foreach ( $search as $itm ) { // general added details $general = array (); // get vid id from response if (stristr ( $search_url, 'playlistItems' )) { $vid_id = $itm->snippet->resourceId->videoId; } elseif (in_array ( 'YT_ID', $camp_opt )) { $vid_id = $itm->id; } else { $vid_id = $itm->id->videoId; } // vid url $link_url = 'https://www.youtube.com/watch?v=' . $vid_id; $httplink_url = 'http://www.youtube.com/watch?v=' . $vid_id; // vid thumbnail $link_img = $itm->snippet->thumbnails->high->url; // get largest size // $link_img = str_replace('hqdefault', 'hqdefault', $link_img); // get item title $link_title = addslashes ( htmlspecialchars_decode($itm->snippet->title , ENT_QUOTES) ); // Skip private videos if ($link_title == 'Private video') { continue; } // Skip premiere if (isset ( $itm->snippet->liveBroadcastContent ) && $itm->snippet->liveBroadcastContent == 'upcoming') { continue; } // Skip premiere if ( in_array( 'OPT_YT_LIVE_SKIP' , $camp_opt ) && isset ( $itm->snippet->liveBroadcastContent ) && $itm->snippet->liveBroadcastContent == 'live') { echo '<li>' . $link_title . '<-- Live video, skipping...' . '</li>'; continue; } // get item description $link_desc = addslashes ( $itm->snippet->description ); // report link echo '<li><a href="'. $link_url .'">' . $link_title . '</a></li>'; // validate exact and banned if (! $this->validate_exacts ( $link_desc, $link_title, $camp_opt, $camp )) { continue; } // channel title $general ['vid_author_title'] = $itm->snippet->channelTitle; // channel id $author = addslashes ( $itm->snippet->channelId ); // link time if (isset ( $itm->contentDetails ) && in_array ( 'OPT_YT_PLAYLIST', $camp_opt )) { $link_time = strtotime ( $itm->contentDetails->videoPublishedAt ); echo ' Published:' . $itm->contentDetails->videoPublishedAt; } else { $link_time = strtotime ( $itm->snippet->publishedAt ); } // Clear these values and generate at runtime to save costs of api requests $link_player = ''; // needs a separate request with v3 api $link_views = ''; $link_rating = ''; $link_duration = ''; // echo 'Published:'. date('Y-m-d',$itm['time']).' '; if ($this->is_execluded ( $camp->camp_id, $link_url )) { echo '<-- Execluded'; continue; } // check if older than minimum date if ((in_array ( 'OPT_YT_DATE', $camp_opt ) && in_array ( 'OPT_YT_PLAYLIST', $camp_opt )) || in_array ( 'OPT_YT_DATE_T', $camp_opt )) { if ($this->is_link_old ( $camp->camp_id, $link_time )) { echo '<--old post execluding...'; continue; } } // serializing general $general = base64_encode ( serialize ( $general ) ); // $link_title =addslashes($link_title); if (! $this->is_duplicate ( $link_url )) { $query = "INSERT INTO {$this->wp_prefix}automatic_youtube_links ( link_url , link_title , link_keyword , link_status , link_desc ,link_time,link_rating ,link_views,link_player,link_img,link_author,link_duration, link_general ) VALUES ( '$link_url', '$link_title', '{$camp->camp_id}_$keyword', '0' ,'$link_desc','$link_time','$link_rating','$link_views','$link_player','$link_img','$author','$link_duration','$general')"; $ins = $this->db->query ( $query ); if($ins){ echo '<-- inserted'; }else{ echo '<-- not inserted ' . $this->db->last_error; } } else { echo ' <- duplicated <a href="' . get_edit_post_link ( $this->duplicate_id ) . '">#' . $this->duplicate_id . '</a>'; } } echo '</ol>'; } /* * ---* youtube post --- */ function youtube_get_post($camp) { $camp_opt = unserialize ( $camp->camp_options ); $keywords = explode ( ',', $camp->camp_keywords ); if (stristr ( $camp->camp_general, 'a:' )) $camp->camp_general = base64_encode ( $camp->camp_general ); $camp_general = unserialize ( base64_decode ( $camp->camp_general ) ); $camp_general = array_map ( 'wp_automatic_stripslashes', $camp_general ); $camp_post_content = $camp->camp_post_content; $camp_post_custom_v = implode ( ',', unserialize ( $camp->camp_post_custom_v ) ); $camp_post_title = $camp->camp_post_title; foreach ( $keywords as $keyword ) { $keyword = trim ( $keyword ); if (trim ( $keyword ) != '') { echo '<br>Keyword:' . $keyword; // update last keyword update_post_meta ( $camp->camp_id, 'last_keyword', trim ( $keyword ) ); // getting links from the db for that keyword $query = "select * from {$this->wp_prefix}automatic_youtube_links where link_keyword='{$camp->camp_id}_$keyword' "; $res = $this->db->get_results ( $query ); // when no links lets get new links if (count ( $res ) == 0) { // clean any old cache for this keyword $query_delete = "delete from {$this->wp_prefix}automatic_youtube_links where link_keyword='{$camp->camp_id}_$keyword' "; $this->db->query ( $query_delete ); $this->youtube_fetch_links ( $keyword, $camp ); // getting links from the db for that keyword $res = $this->db->get_results ( $query ); } // deleting duplicated items $res_count = count ( $res ); for($i = 0; $i < $res_count; $i ++) { $t_row = $res [$i]; $t_link_url = $t_row->link_url; $t_link_url_http = str_replace ( 'https', 'http', $t_link_url ); if ($this->is_duplicate ( $t_link_url ) || $this->is_duplicate ( $t_link_url_http )) { // duplicated item let's delete unset ( $res [$i] ); echo '<br>Vid (' . $t_row->link_title . ') found cached but duplicated <a href="' . get_permalink ( $this->duplicate_id ) . '">#' . $this->duplicate_id . '</a>'; // delete the item $query = "delete from {$this->wp_prefix}automatic_youtube_links where link_id='{$t_row->link_id}'"; $this->db->query ( $query ); } else { break; } } // check again if valid links found for that keyword otherwise skip it if (count ( $res ) > 0) { // lets process that link $ret = $res [$i]; echo '<br>Link:' . $ret->link_url . '('.$ret->link_title.')'; // extract video id $temp_ex = explode ( 'v=', $ret->link_url ); $vid_id = $temp_ex [1]; // set used url $this->used_link = trim ( $ret->link_url ); $temp ['vid_title'] = trim ( $ret->link_title ); $temp ['vid_url'] = trim ( $ret->link_url ); $temp ['source_link'] = trim ( $ret->link_url ); $temp ['vid_time'] = trim ( $ret->link_time ); $temp ['vid_author'] = trim ( $ret->link_author ); // generate player $width = $camp_general ['cg_yt_width']; $height = $camp_general ['cg_yt_height']; if (trim ( $width ) == '') $width = 580; if (trim ( $height ) == '') $height = 385; $embedsrc = "https://www.youtube.com/embed/" . $vid_id; if (in_array ( 'OPT_YT_SUGGESTED', $camp_opt ) && in_array ( 'OPT_YT_AUTO', $camp_opt )) { $embedsrc .= '?rel=0&autoplay=1'; } elseif (in_array ( 'OPT_YT_SUGGESTED', $camp_opt )) { $embedsrc .= '?rel=0'; } if (in_array ( 'OPT_YT_AUTO', $camp_opt )) { if (stristr ( $embedsrc, '?' )) { $embedsrc .= '&autoplay=1'; } else { $embedsrc .= '?autoplay=1'; } } if (in_array ( 'OPT_YT_CAPTION', $camp_opt )) { if (stristr ( $embedsrc, '?' )) { $embedsrc .= '&cc_load_policy=1'; } else { $embedsrc .= '?cc_load_policy=1'; } } // lang if (in_array ( 'OPT_YT_PLAYER_LANG', $camp_opt )) { $plang = trim ( $camp_general ['cg_yt_plang'] ); if (stristr ( $embedsrc, '?' )) { $embedsrc .= '&hl=' . $plang; } else { $embedsrc .= '?hl=' . $plang; } } // yt logo if (in_array ( 'OPT_YT_LOGO', $camp_opt )) { if (stristr ( $embedsrc, '?' )) { $embedsrc .= '&modestbranding=1'; } else { $embedsrc .= '?modestbranding=1'; } } // title tag if (in_array ( 'OPT_YT_F_TITLE', $camp_opt )) { $title_part = 'title = "' . esc_attr ( $temp ['vid_title'] ) . '" '; } else { $title_part = ''; } $temp ['vid_player'] = '<iframe ' . $title_part . ' width="' . $width . '" height="' . $height . '" src="' . $embedsrc . '" frameborder="0" allowfullscreen></iframe>'; // ini get video details flag if true will request yt again for new data $get_vid_details = false; $get_vid_details_parts = array (); // statistics part $temp ['vid_views'] = trim ( $ret->link_views ); $temp ['vid_rating'] = trim ( $ret->link_rating ); // general $general = unserialize ( base64_decode ( $ret->link_general ) ); $temp ['vid_author_title'] = $general ['vid_author_title']; // merging post content with custom fields values to check what tags $camp_post_content_original = $camp_post_content; $camp_post_content = $camp_post_custom_v . $camp_post_content . ' ' . $camp_post_title; if (stristr ( $camp_post_content, 'vid_views' ) || stristr ( $camp_post_content, 'vid_rating' ) || stristr ( $camp_post_content, 'vid_likes' ) || stristr ( $camp_post_content, 'vid_dislikes' )) { $get_vid_details = true; $get_vid_details_parts [] = 'statistics'; } elseif (defined ( 'PARENT_THEME' )) { if (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube') { $get_vid_details = true; $get_vid_details_parts [] = 'statistics'; } } // contentdetails part $temp ['vid_duration'] = trim ( $ret->link_duration ); if (stristr ( $camp_post_content, 'vid_duration' ) || class_exists ( 'Cactus_video' )) { $get_vid_details = true; $get_vid_details_parts [] = 'contentDetails'; } // snippet part full content $temp ['vid_desc'] = trim ( $ret->link_desc ); // if full description from youtube or tags let's get them if (in_array ( 'OPT_YT_FULL_CNT', $camp_opt ) || (in_array ( 'OPT_YT_PLAYLIST', $camp_opt )) || in_array ( 'OPT_YT_TAG', $camp_opt ) ) { $get_vid_details = true; $get_vid_details_parts [] = 'snippet'; } // restore the content $camp_post_content = $camp_post_content_original; // now get the video details again if active if ($get_vid_details) { echo '<br>Getting more details from youtube for the vid..'; // token $wp_automatic_yt_tocken = trim ( wp_automatic_single_item ( 'wp_automatic_yt_tocken' ) ); // curl get $x = 'error'; $ccurl = 'https://www.googleapis.com/youtube/v3/videos?key=' . $wp_automatic_yt_tocken . '&part=' . implode ( ',', $get_vid_details_parts ) . '&id=' . $vid_id; echo '<br>yt link:' . $ccurl; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $ccurl ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (stristr ( $exec, 'kind' )) { $json_exec = json_decode ( $exec ); $theItem = $json_exec->items [0]; // check snippet if (isset ( $theItem->snippet )) { // playlist get correct author and author id if (in_array ( 'OPT_YT_PLAYLIST', $camp_opt )) { $temp ['vid_author_title'] = $theItem->snippet->channelTitle; // channel id $temp ['vid_author'] = addslashes ( $theItem->snippet->channelId ); } // setting full content if (in_array ( 'OPT_YT_FULL_CNT', $camp_opt )) { $temp ['vid_desc'] = $theItem->snippet->description; echo '<br>Full description set '; } $temp ['vid_time'] = strtotime ( $theItem->snippet->publishedAt ); } // check contentdetails details if (isset ( $theItem->contentDetails )) { $youtube_time = $theItem->contentDetails->duration; $DTClass = new DateTime ( '@0' ); // Unix epoch $DTClass->add ( new DateInterval ( $youtube_time ) ); $temp ['vid_duration'] = $DTClass->format ( 'H:i:s' ); } // check statistics details if (isset ( $theItem->statistics )) { $temp ['vid_views'] = $theItem->statistics->viewCount; $likeCount = $theItem->statistics->likeCount; $dislikeCount = $theItem->statistics->dislikeCount; if( $likeCount + $dislikeCount !== 0){ $rating = $likeCount / ($likeCount + $dislikeCount); $rating = $rating * 5; $rating = number_format ( $rating, 2 ); }else{ $rating = ''; } $temp ['vid_rating'] = $rating; $temp ['vid_likes'] = $theItem->statistics->likeCount; $temp ['vid_dislikes'] = $theItem->statistics->dislikeCount; } //vid_tags if(isset($theItem->snippet->tags) && count($theItem->snippet->tags) > 0 ){ echo '<br>'.count($theItem->snippet->tags) . ' tags found'; $temp ['vid_tags'] = implode(',' , $theItem->snippet->tags); $this->used_tags = $temp ['vid_tags']; } } else { echo '<br>no valid reply from youtube '; } } $temp ['vid_img'] = trim ( $ret->link_img ); $temp ['vid_id'] = trim ( $vid_id ); $this->used_keyword = $ret->link_keyword; // if vid_image contains markup extract the source only if (stristr ( $temp ['vid_img'], '<img' )) { preg_match_all ( '/src\="(.*?)"/', $temp ['vid_img'], $matches ); $temp ['vid_img'] = $matches [1] [0]; } // update the link status to 1 $query = "delete from {$this->wp_prefix}automatic_youtube_links where link_id={$ret->link_id}"; $this->db->query ( $query ); // if cache not active let's delete the cached videos and reset indexes if (! in_array ( 'OPT_YT_CACHE', $camp_opt )) { echo '<br>Cache disabled claring cache ...'; $query = "delete from {$this->wp_prefix}automatic_youtube_links where link_keyword='{$camp->camp_id}_$keyword' "; // $query = "update {$this->wp_prefix}automatic_youtube_links set link_status ='1' where link_keyword='{$camp->camp_id}_$keyword' and link_status ='0'"; $this->db->query ( $query ); // reset index $query = "update {$this->wp_prefix}automatic_keywords set keyword_start =1 where keyword_camp={$camp->camp_id}"; $this->db->query ( $query ); } // Vid_date publish date $temp ['vid_date'] = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', $temp ['vid_time'] ) ); // OPT_YT_HYPER if (in_array ( 'OPT_YT_HYPER', $camp_opt )) { $temp ['vid_desc'] = $this->hyperlink_this ( $temp ['vid_desc'] ); } // download link $temp ['vid_download_url'] = 'https://www.youtubepp.com/watch?v=' . $temp ['vid_id']; //convert time to seconds $temp['vid_duration_in_seconds'] = $this->time_to_seconds($temp['vid_duration']); // get transcript if available exists as a tag using do_tag_exists if($this->do_tag_exists($camp , array('[transcript]' , '[transcript_raw]'))){ //report tag exists, getting transcript echo '<br>Transcript tag found, getting transcript ...'; //init transcript $temp['transcript'] = ''; $temp['transcript_raw'] = ''; //get transcript using get_video_transcript function and try catch try{ $result = $this->get_video_transcript($temp['vid_id']); $temp['transcript'] = $result['text']; //report success and charlength of $temp['transcript'] echo '<br>Transcript got successfully with a length of ' . strlen($temp['transcript']) . ' chars'; //$result['sentences'] contains an array of sentences and every sentence has time and text, lets iterate the sentences, concatinate time to the text and add a new line foreach($result['sentences'] as $sentence){ $temp['transcript_raw'] .= $sentence['time'] . ' ' . $sentence['text'] . "\n"; } }catch(Exception $e){ echo '<br>Transcript error: '.$e->getMessage(); } } return $temp; } else { echo '<br>No links found for this keyword'; } } // if trim } // foreach keyword } function get_channel_id_foruser($user , $wp_automatic_yt_tocken){ // $user contains a channel URL like https://www.youtube.com/c/HolyCulture echo '<br>Getting channel ID from URL:'.$user; $md5 = md5($user); //cached? $cached = get_post_meta($this->currentCampID , $md5 , true); if(trim($cached) != '') { echo '<--cached:' . $cached; return $cached; } //first time,lets get and cache //curl get $x='error'; $url=trim($user); curl_setopt($this->ch, CURLOPT_HTTPGET, 1); curl_setopt($this->ch, CURLOPT_URL, trim($url)); //set SOCS cookie for youtube ask for cookies $cookies = 'SOCS=CAISNQgDEitib3FfaWRlbnRpdHlmcm9udGVuZHVpc2VydmVyXzIwMjMwMjI4LjA2X3AwGgJlbiACGgYIgJSKoAY;'; curl_setopt($this->ch, CURLOPT_COOKIE, $cookies); $exec=curl_exec($this->ch); $x=curl_error($this->ch); $cuinfo = curl_getinfo($this->ch); echo '<-- returned ' . $cuinfo['size_download'] . ' request code: '. $cuinfo['http_code']; preg_match('!"externalId":"(.*?)"!', $exec , $id_matches); if(isset($id_matches[1]) && trim($id_matches[1]) != '' ) { //cache and return update_post_meta($this->currentCampID , $md5 , $id_matches[1] ); echo '<-- found:' . $id_matches[1]; return $id_matches[1]; }else{ echo '<-- not found'; } return $user; } //function that takes the video ID and returns the video transcript in text format using Youtube API function get_video_transcript($video_id){ echo '<br>Getting transcript for video ID: '.$video_id; //use api_call function to get the transcript from remote server using method getTranscript and try catch try{ $transcript = $this->api_call('getTranscript', array('videoId' => $video_id)); return $transcript; }catch(Exception $e){ throw new Exception('Error getting transcript: '.$e->getMessage()); } } }