返回首頁 

Greasy Fork is available in English.

YouTube Auto-Liker

Automatically likes videos of channels you're subscribed to

  1. // ==UserScript==// @name YouTube Auto-Liker// @name:zh YouTube自動點讚// @name:ja YouTubeのような自動// @namespace https://github.com/HatScripts/YouTubeAutoLiker// @version 1.2.0// @description Automatically likes videos of channels you're subscribed to// @description:zh 對您訂閲的頻道視頻自動點讚// @description:ja このスクリプトは、あなたが購読しているチャンネルの動画を自動的に好きです// @description:ru Этот сценарий автоматически нравится видео каналов, на которые вы подписаны// @description:es A este script le gustan los videos de los canales a los que está suscrito// @description:pt Este script gosta automaticamente dos vídeos dos canais aos quais está inscrito// @author HatScripts// @icon https://cdn.rawgit.com/HatScripts/YouTubeAutoLiker/master/logo.svg// @match http://*.youtube.com/watch*// @match https://*.youtube.com/watch*// @require https://greasyfork.org/scripts/33864-debugger/code/Debugger.js// @run-at document-idle// @noframes// ==/UserScript==(function () {'use strict'const DEBUG_ENABLED = GM_info.script.version === 'DEV_VERSION'const DEBUG = new Debugger(GM_info.script.name, DEBUG_ENABLED)const OPTIONS = {CHECK_FREQUENCY: 5000,WATCH_THRESHOLD: 0.5,}const SELECTORS = {PLAYER: '#movie_player',SUBSCRIPTION_BUTTON: '#subscribe-button paper-button, .yt-uix-subscription-button',LIKE_BUTTON: 'ytd-video-primary-info-renderer #top-level-buttons > ytd-toggle-button-renderer:nth-child(1), .like-button-renderer-like-button:not(.hid)',}const LIKE_BUTTON_CLICKED_CLASSES = ['style-default-active', 'like-button-renderer-like-button-clicked']let autoLikedVideoIds = []setTimeout(wait, OPTIONS.CHECK_FREQUENCY)function getVideoId() {let elem = document.querySelector('#page-manager > ytd-watch-flexy')if (elem && elem.hasAttribute('video-id')) {return elem.getAttribute('video-id')} else {let queryString = window.location.searchreturn queryString.substr(queryString.indexOf('v=') + 2, 11)}}function watchThresholdReached() {let player = document.querySelector(SELECTORS.PLAYER)if (player) {return player.getCurrentTime() / player.getDuration() >= OPTIONS.WATCH_THRESHOLD}return true}function isSubscribed() {DEBUG.info('Checking whether subscribed...')let subscriptionButton = document.querySelector(SELECTORS.SUBSCRIPTION_BUTTON)if (!subscriptionButton) {throw 'Couldn\'t find sub button'}return subscriptionButton.hasAttribute('subscribed') || subscriptionButton.dataset.isSubscribed}function wait() {if (watchThresholdReached()) {try {if (isSubscribed()) {DEBUG.info('We are subscribed')like()} else {DEBUG.info('We are not subscribed')}} catch (e) {DEBUG.info('Failed to like video: ' + e + '. Will try again in 5 seconds...')}}setTimeout(wait, OPTIONS.CHECK_FREQUENCY)}function like() {DEBUG.info('Trying to like video...')let likeButton = document.querySelector(SELECTORS.LIKE_BUTTON)if (!likeButton) {throw 'Couldn\'t find like button'}let videoId = getVideoId()if (LIKE_BUTTON_CLICKED_CLASSES.some(c => likeButton.classList.contains(c))) {DEBUG.info('Like button has already been clicked')autoLikedVideoIds.push(videoId)} else if (autoLikedVideoIds.includes(videoId)) {DEBUG.info('Video has already been auto-liked. User must ' +'have un-liked it, so we won\'t like it again')} else {DEBUG.info('Found like button')DEBUG.info('It\'s unclicked. Clicking it...')likeButton.click()autoLikedVideoIds.push(videoId)DEBUG.info('Successfully liked video')}}}())