GoFunMe May 1, 2023 1:21 PM   Subscribe

Almost a year ago I posted this pony request. I appreciate how a few people started to get into it, but then it died out, as these things do. But I still want my pony, and while I don't have the time or skill to do it myself, I do have a little extra money, so here's my offer:

If I get my pony I will donate $250 to MetaFilter.

Here are the specifications:

1. It is an official MetaFilter YouTube channel.
2. I can reach it on my TV through the Roku/AppleTV/whatever YouTube app.
3. It is a playlist or lists of every YouTube link in any FPP, from some date forward, but ignores comments.
4. The newest links are first.
5. It updates automatically.

This pony will measurably increase the fun in my life. After we are done with our work, and then our chores, Mrs. Gogue and I have about 30 to 60 minutes of screen time any given night before we can't stay awake anymore. And when we are choosing what to watch I can never remember that cool FPP was that I was saving to watch later with her. This channel will make it easy to find the neat videos that I didn't have time for during the day. Videos from the MetaFilter channel would be great once or twice a week instead of the usual fare, and far more stimulating. The main point being that we are watching these things together instead of separately, if at all. As a side benefit, I think it will also help break us out of our YouTube recommendations echo chambers. And naturally, I hope and believe many MeFites will also enjoy these same benefits.

I can see benefits to MetaFilter in the long run too. It may bring YT ad revenue. It may bring people into the site to talk about the video they just saw. It may bring people here to see who puts up such an eclectic playlist.

In summary, a nice pony is worth paying for and I'd be more than happy to "buy this round" so everyone can ride.
posted by hypnogogue to Feature Requests at 1:21 PM (20 comments total) 2 users marked this as a favorite

Well, I don't think metafilter will get ad revenue for other people's videos.

I'm not sure what the YouTube API lets you do, but the idea of a rolling playlist (not sure what you mean by official channel) would certainly be doable manually.
posted by sagc at 1:24 PM on May 1, 2023


Unofficial might be better; sometimes people link to offensive/hateful/propaganda content in order to discuss it or make a point, but without comment it might look like MF is endorsing it.
posted by trig at 2:04 PM on May 1, 2023 [6 favorites]


Playlists are limited to 200 videos, so it would have to be the most recent videos found in posts, not all.

I've worked a little with the YT API and while using it to programmatically update a playlist is certainly possible, I've found the experience to be a nightmare, mostly relating to the quota. It looks like the default quota allotted allows 200 updates per day. If you were doing one playlist of the 200 most recent, each video would require 2 updates -- one to remove the oldest video from the playlist and one to add the new video. So that's 100 videos per day at most. I don't know how many we're dealing with, probably not anywhere close to that many, but who knows. (Quick checks shows under 5 per day, so, okay, probably not an issue yet.)

When you run out of quota you have to go through an agonizingly stupid audit from the YT team where you show them your code and a screencast of you using the thing you've built. I don't want to rant but dealing with that has been a major pain. And they didn't just want it once.

Mefi would definitely not get any money from this. You have to post videos that you made to get anything.

I would suggest that something a little more gonzo (like a simple python script to scrape the main page or RSS feed, and spit out a plain HTML list of YT links) has an infinitely higher chance of actually happening. I'm sure your TV has a browser that can visit a page and see a list of links, and then you could click on them. It would take almost nothing to host and I'm sure someone out there could whip that up in a day or two.
posted by Rhomboid at 2:48 PM on May 1, 2023 [2 favorites]


Playlists are limited to 200 videos, so it would have to be the most recent videos found in posts, not all.

This is not my experience, my Youtube oddity list DANGER RADIOACTIVE is much longer than 200 videos.
posted by JHarris at 3:56 PM on May 1, 2023 [2 favorites]


Does MeFi Labs help with this pony?

Labs Recent YouTube

Labs Comments Recent YouTube
posted by tiny frying pan at 5:00 PM on May 1, 2023 [1 favorite]


This is not my experience, my Youtube oddity list DANGER RADIOACTIVE is much longer than 200 videos.

It seems like it used to be 200, now it's 5000.

This is a perfect example of how google search has gone to absolute shit. I googled "youtube playlist max length", and the first result (which also got the 'highlighted pullquote in search results' treatment), was this link, directly from Google's API client library documentation, saying that the limit is 200.
posted by Rhomboid at 5:37 PM on May 1, 2023 [5 favorites]


Embarrassingly, Bing does a better job. My how the times have changed.
posted by Rhomboid at 5:42 PM on May 1, 2023 [5 favorites]


Appreciate the suggestions!

Maybe one playlist per month would be more manageable.

Using a tv browser would not help. That's what I'm trying to avoid.
posted by hypnogogue at 5:49 PM on May 1, 2023


Have it generated weekly, not monthly. And don't overwrite the old playlists, just have a new playlist come out every, say, Friday evening for weekend viewing.

I cannot help create this project at all, but it's a really cool idea. I missed it the first time around.
posted by hippybear at 10:54 AM on May 2, 2023 [2 favorites]


If there's a mod reading this, something like this would be a perfect opportunity to make use of those volunteers whose names have hopefully been continuously collected, of people who have skills they're willing to use on the site's behalf, yes/no?
posted by The Pluto Gangsta at 2:14 PM on May 2, 2023 [3 favorites]


How about one playlist per thread-which-has-any-YT-links?
posted by wenestvedt at 6:33 AM on May 3, 2023


(I must say that I kind of like the notion of putting a bounty on the request, which supports the site.)
posted by wenestvedt at 6:33 AM on May 3, 2023


I also like the idea of putting a bounty on the request. However, I would like to point out that ponies like this often come with costs, whether up front or ongoing, that may or may not be mitigated by the donation on offer. I'm guessing that hypnogogue had those costs in mind when making the offer, but I just wanted to reemphasize that because it could set a sticky precedent.
posted by Night_owl at 7:55 AM on May 3, 2023 [1 favorite]


I’ve started several times making a web scraping app that compiles MeFi YT links into at least URLs - that would be the first step to dynamically generating a playlist.

Here’s my MeFi Projects link with some feedback from users.
posted by bendy at 1:38 AM on May 4, 2023 [4 favorites]


@hippybear: I cannot help create this project at all, but it's a really cool idea. I missed it the first time around.
Your posts are some of the ones I want to see more of!

@wenestvedt: How about one playlist per thread-which-has-any-YT-links?
My preference is not to include links from within threads because
(1) I fear they will not be as well curated
(2) There is no endpoint to the scraping. How often do you check? By just including FPP links it vastly simplifies the programming. You could possibly even use RSS from just the main page to trigger your script.
posted by hypnogogue at 8:36 AM on May 4, 2023


something like this would be a perfect opportunity to make use of those volunteers whose names have hopefully been continuously collected, of people who have skills they're willing to use on the site's behalf, yes/no?

Maybe?

1. I am all in favor of this idea generally.
2. It's a little less clear if the combination of "automatically generated" and "official channel" is going to work out unless the playlist is CRYSTAL clear about the automatically generated nature of it (I'm also not clear if there is a MeFi YouTube channel, I think no).
3. Yes, we have a list of volunteers, but also there are issues with using volunteer labor so we could maybe contribute the donation here to some sort of bounty situation
4. We should look into how that Labs thing works, it might be easier than we think.
posted by jessamyn (staff) at 4:25 PM on May 4, 2023 [1 favorite]


The process could be automatic to post but easy for the channel admin to delete. Or it could wait a day to make sure any naughty posts are already deleted.

As for volunteer labor, since it's offsite, maybe that doesn't matter.
posted by hypnogogue at 7:08 AM on May 5, 2023


This is interesting.

I have to say, I might be more inclined to look at a playlist like this if, say, the calling-cats-in-different-languages videos were in a separate playlist from a John-Oliver-reminding-me-how-messed-up-something-is playlist. Or someone talking about an overlooked injustice / tragedy from the past. Or whatever Maru is doing. Maybe "political/historical" separate from "fun/cute"?

Sometimes just seeing the title of something related to [worst part of society here] is too much.
posted by amtho at 11:18 PM on May 8, 2023


Here's a start via our AI overlords, I haven't tried it. Maybe we could put it on github and work on it together?

Before running the script, you need to set up a few things:

Obtain API credentials for the YouTube Data API v3. You can follow the instructions here: https://developers.google.com/youtube/registering_an_application
Install the required libraries by running pip install beautifulsoup4 google-api-python-client google-auth-httplib2 google-auth-oauthlib.
import os
import time
import requests
from bs4 import BeautifulSoup
from google.oauth2 import credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# Set up YouTube API credentials
API_KEY = 'YOUR_YOUTUBE_API_KEY'
CLIENT_SECRETS_FILE = 'client_secrets.json'  # Path to your client secrets file
SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']

# Set up MetaFilter website URL
META_FILTER_URL = 'https://www.metafilter.com'

# Set up YouTube playlist ID
PLAYLIST_ID = 'YOUR_PLAYLIST_ID'

# Set up interval between scrapes (in seconds)
SCRAPE_INTERVAL = 3600  # 1 hour

# Set up file path for storing added video IDs
VIDEO_IDS_FILE = 'added_video_ids.txt'

def get_youtube_videos():
    # Scrape MetaFilter website for new posts
    response = requests.get(META_FILTER_URL)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    # Find all post links
    post_links = soup.find_all('a', {'rel': 'bookmark'})
    
    youtube_videos = []
    
    # Check each post for YouTube video links
    for link in post_links:
        url = link.get('href')
        
        # Only process URLs that contain 'youtube.com'
        if 'youtube.com' in url:
            youtube_videos.append(url)
    
    return youtube_videos

def add_video_to_playlist(youtube, video_url):
    # Extract YouTube video ID from the URL
    video_id = video_url.split('v=')[1]
    
    # Insert video into the playlist
    request = youtube.playlistItems().insert(
        part='snippet',
        body={
            'snippet': {
                'playlistId': PLAYLIST_ID,
                'position': 0,
                'resourceId': {
                    'kind': 'youtube#video',
                    'videoId': video_id
                }
            }
        }
    )
    response = request.execute()
    
    print(f"Added video to playlist: {response['snippet']['title']}")

def load_added_video_ids():
    if not os.path.exists(VIDEO_IDS_FILE):
        return set()
    
    with open(VIDEO_IDS_FILE, 'r') as f:
        video_ids = set(f.read().splitlines())
    
    return video_ids

def save_added_video_ids(video_ids):
    with open(VIDEO_IDS_FILE, 'w') as f:
        f.write('\n'.join(video_ids))

def authorize_youtube_api():
    flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
    credentials = flow.run_console()
    return build('youtube', 'v3', credentials=credentials)

def main():
    # Authorize the YouTube API
    youtube = authorize_youtube_api()
    
    # Load the previously added video IDs
    added_video_ids = load_added_video_ids()
    
    while True:
        try:
            # Get YouTube videos from MetaFilter
            youtube_videos = get_youtube_videos()
            
            # Add each video to the playlist if not already added
            for video_url in youtube_videos:
                video_id = video_url.split('v=')[1]
                
                if video_id not in added_video_ids:
                    add_video_to_playlist(youtube, video_url)
                    added_video_ids.add(video_id)
posted by signal at 12:58 PM on May 11, 2023


That python code looks like a good start.

Is anyone still thinking about this?
posted by hypnogogue at 6:31 AM on May 29, 2023


« Older I'll See You In My Dreams   |   Metatalktail Hour: The Song Remembers When Newer »

You are not logged in, either login or create an account to post comments