ANNOUNCE: YouTube Plugin (API v3)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • philippe_44
    Senior Member
    • May 2008
    • 9343

    ANNOUNCE: YouTube Plugin (API v3)

    The YouTube plugin thread is long and I cannot edit the initial post as it belongs to Triode. I've made a lot of changes since I started to maintain it so I think its better to start a new thread, as its difficult to find relevant information in the initial one.

    The stable version is in the 3rd party plugins, but if you want the dev version, add the following repository
    Code:
    http://downloads.sourceforge.net/project/lms-plugins-philippe44/dev/repo-sf.xml
    You *need* a YouTube API key, so either find somebody that gives you one or follow these steps

    - using your gmail account
    - Goto https://console.developers.google.com
    - Click: Create Project
    - Name the project. Example: YouTube-API-Key-Project
    - Leave Organization Blank
    - Click Create
    - Once at your project dashboard, in the APIs box, click: Go to APIs Overview
    - In the APIs & Services Dashboard, click: Enable APIs and Services
    - In the API Library, search for "youtube" and click: YouTube Data API v3
    - In the YouTube Data API v3 screen, click: ENABLE
    - In the YouTube Data API v3 Overview, click: CREATE CREDENTIALS
    - Under "Which API are you using?" choose: YouTube Data API v3
    - under “What data will you accessing” choose: Public data
    - Under "Where will you be calling the API from?" choose: Web browser (Javascript)
    - Under "What data will you be accessing?" choose: Public data
    - Then click "What credentials do I need?" button.
    - You should now see your API key. Copy it to your clipboard.
    - Click the link: "Restrict key"
    - Under "API restrictions" select Restrict key, and check "YouTube Data API v3"
    - Click Save
    - Return to the YouTube plugin and paste your key, making sure there are no leading or trailing spaces in what you paste.

    This plugin *requires* SSL so make sure it's installed on your LMS server. Not a problem for Windows, OSX, most Linux x86, Raspberry pi, Cubie, Odroid and others that use a Debian-based, but can be problematic with some NAS. I don't have a perfect guide, so please refer to your NAS forum, but most of the recent NAS firmware update include SSL as well, so that might be all that is required.

    Other than that, Perl must have SSL support enabled, which again is available in all recent distribution and LMS versions (I think). But in case of problem and for Debian-ish Linux, you can try "sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl" at any command prompt. Here is as well the link to the original thread http://forums.slimdevices.com/showth...l=1#post631449

    Another note regarding the "Country for Categories". I've seen a lot of people changing it to UK and complaining that they've changed nothing but the plugin does not work. So, 'UK' is *not* a region code, but 'GB' is. Not my decision https://www.worldatlas.com/aatlas/ctycodes.htm

    When you want to use your own account, you need the OAuth registration. It evolves regularly in Google and I can' update the help in the settings all the time. A tricky part is the consent screen as well as the type of application. Choose "TV and limited input" not "Desktop application"

    Update 2024-02 - version 0.200

    You can now have some level of control of the ranking and order of tracks/playlist/channels the plugin presents to you. It's not perfect, so just a quick recall of the concept of YT. You have the notion of tracks, playlist (a set of tracks) and channels (a set of playlists and tracks). Each item has a unique ID. The most important way to navigate the plugin is the search function. A search have the following parameters

    - what is the query (a plain text question, including boolean logic |&..)
    - with what ranking order do you want YT to parse the database: relevance, date, title, view counts, ratings
    - what content do you want to have returned: channels, playlist, tracks (any combination of these)
    - how many do you want returned at each call (50 maximum)
    - each search costs 100 credits and you have 10,000 credits per 24 hours (0:00 PST reset)

    YT will tell you how many total items matched your search, but will only send them by batched (pages) of up to 50. Each page containa link to the next page, so you need to follow them in order. You can't access page 5 without going through 1..4 before. So you can receive many batches/pages but it takes time.

    Once you have receive a list of items, of course locally you can sort them by title, date or leave them as returned.

    Now, this API has some oddities:

    - You can request (list) the content of a playlist by providing its ID and YT will return its items (tracks), still paginated, but you can't ask for a ranking order. You have to do a sort locally. Such request costs 1 credit.
    - You can NOT request the content of a channel by providing its ID. To access a channel when you know it's ID, you must do a full search but add the ID so that the search is limited to that channel. You can also add a query (question) but I've not allowed that option. Now, because it's search, not a list, you can as well specifiy in what ranking order you want YT to parse the channel (relevance, date, title, view counts, ratings). Bear in mind that this will cost you 100 credits as well.

    Of course, every result is cached (and you can tweak that) but still keep in mind that listing channels content is expensive. Listing playlist content is not.

    The plugin has a limit of the total amount of items it will ever request in a search, and it will do them page by page of 50 each, as you browse the results, when you want to see more (using whetever controller you prefer classic, material, iPeng...). That as the consequence that the plugin can only sort what it already has.
    Typically, the first time it has 50 items and if you want to sort them by title, the result will be different from a sorting once you have been to the last page of the search. For example, if an item in the last page as the title 'AAA', it will not be known until you have been to that last page. You can override that by changing the "query batch size" setting, but understand that now the plugin will require as many pages of 50 each time so that it grabs "query batch size" items at each request. It can be VERY long.

    To be remembered: the "ranking" order refers to the order YT uses to look at its database and see the matches and the "sorting" order refers to the sorting the plugin does once it has received a set of items. Items are received by pages of maximum 50 and the plugin can only sort what it has received. Each search, and that include channel listing, costs 100 credist and you have 10,000 credits per day.

    Last edited by philippe_44; 2024-02-12, 23:39.
    LMS 8.2 on Odroid-C4 - SqueezeAMP!, 5xRadio, 5xBoom, 2xDuet, 1xTouch, 1xSB3. Sonos PLAY:3, PLAY:5, Marantz NR1603, Foobar2000, ShairPortW, 2xChromecast Audio, Chromecast v1 and v2, Squeezelite on Pi, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5, RivaArena 1 & 3
  • pippin
    Senior Member
    • Oct 2007
    • 14809

    #2
    Too cool.
    So many thanks again that you are keeping this invaluable plugin alive!
    :thumbsup:
    ---
    learn more about iPeng, the iPhone and iPad remote for the Squeezebox and
    Logitech UE Smart Radio as well as iPeng Party, the free Party-App,
    at penguinlovesmusic.com
    New: iPeng 9, the Universal App for iPhone, iPad and Apple Watch

    Comment

    • srasher
      Member
      • Jun 2006
      • 86

      #3
      Originally posted by pippin
      Too cool.
      So many thanks again that you are keeping this invaluable plugin alive!
      :thumbsup:
      +1
      "The only word I know is 'Grunt' - and I can't spell it" (R.I.P. D.A.)

      Comment

      • SlimChances
        Senior Member
        • Apr 2005
        • 2094

        #4
        Yes Thanks +1
        Logitech Media Server Version: 9.0.0 - 1711180501 @ Sun 24 Mar 2024 02:44:46 AM CET
        Server HTTP Port Number: 9000
        Operating system: Debian - EN - utf8
        Platform Architecture: aarch64-linux
        Database Version: SQLite​

        Comment

        • alnames
          Member
          • Jul 2014
          • 93

          #5
          Works for me

          This is working for me on my picoreplayer running LMS. Great work.

          Comment

          • kidstypike
            Senior Member
            • Feb 2007
            • 6444

            #6
            Working well here ..

            .. on my RPi3/Max2play/LMS7.9, thank you Phillipe.
            Pi5 .. pCP 9beta5 .. LMS 8.4 -- nomysqueezebox
            Study - Pi2B .. S.M.S.L SU-1 .. Q Acoustics M20
            Snug/TV .. DAC32 .. Audio Engine B2
            Spares - 1xSBTouch, 1xSB3, 4xRPi, AVI DM5 speakers

            Comment

            • philippe_44
              Senior Member
              • May 2008
              • 9343

              #7
              Please use that thread for YouTube - I'll stop answering on the old one

              placeholder
              LMS 8.2 on Odroid-C4 - SqueezeAMP!, 5xRadio, 5xBoom, 2xDuet, 1xTouch, 1xSB3. Sonos PLAY:3, PLAY:5, Marantz NR1603, Foobar2000, ShairPortW, 2xChromecast Audio, Chromecast v1 and v2, Squeezelite on Pi, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5, RivaArena 1 & 3

              Comment

              • Freddy
                Senior Member
                • Oct 2010
                • 119

                #8
                Anyone got this running on ReadyNas OS 6.5.1?
                For all I know the NAS has SSL installed still I get:

                Code:
                [16-07-21 22:20:51.4145] Slim::bootstrap::tryModuleLoad (286) Warning: Module [Plugins::YouTube::Plugin] failed to load:
                Base class package "IO::Socket::SSL" is empty.
                    (Perhaps you need to 'use' the module which defines that package first,
                    or make that module available in @INC (@INC contains: /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/TrackStatPlaylist/lib /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/TrackStat/lib /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/SrvrPowerCtrl/lib /data/.apps/squeezeboxserver/cache/_Inline/lib /var/lib/squeezeboxserver/cache/InstalledPlugins /usr/share/squeezeboxserver/CPAN/arch/5.14/x86_64-linux-thread-multi /usr/share/squeezeboxserver/CPAN/arch/5.14/x86_64-linux-thread-multi/auto /usr/share/squeezeboxserver/CPAN/arch/5.14.2/x86_64-linux-gnu-thread-multi /usr/share/squeezeboxserver/CPAN/arch/5.14.2/x86_64-linux-gnu-thread-multi/auto /usr/share/squeezeboxserver/CPAN/arch/5.14/x86_64-linux-gnu-thread-multi /usr/share/squeezeboxserver/CPAN/arch/5.14/x86_64-linux-gnu-thread-multi/auto /usr/share/squeezeboxserver/CPAN/arch/x86_64-linux-gnu-thread-multi /usr/share/squeezeboxserver/CPAN/arch/5.14 /usr/share/squeezeboxserver/lib /usr/share/squeezeboxserver/CPAN /usr/share/squeezeboxserver /usr/sbin /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .).
                 at /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/YouTube/ProtocolHandler.pm line 2.
                BEGIN failed--compilation aborted at /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/YouTube/ProtocolHandler.pm line 2.
                Compilation failed in require at /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/YouTube/Plugin.pm line 18.
                BEGIN failed--compilation aborted at /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/YouTube/Plugin.pm line 18.
                Compilation failed in require at (eval 974) line 2.
                BEGIN failed--compilation aborted at (eval 974) line 2.

                Comment

                • clausmuus
                  Junior Member
                  • Jan 2013
                  • 7

                  #9
                  Open Video by CLI

                  Hi,

                  thanks for this great Plugin!

                  Is there a way, how I can open a Youtube URL by CLI, so that I can select a video by a script?

                  Claus

                  Comment

                  • clausmuus
                    Junior Member
                    • Jan 2013
                    • 7

                    #10
                    Open Video by CLI

                    OK, I have found the solution:
                    Code:
                    echo -e "playlist play youtube:VIDEO_ID\nexit" | nc localhost 9090
                    Claus

                    Comment

                    • philippe_44
                      Senior Member
                      • May 2008
                      • 9343

                      #11
                      Originally posted by clausmuus
                      OK, I have found the solution:
                      Code:
                      echo -e "playlist play youtube:VIDEO_ID\nexit" | nc localhost 9090
                      Claus
                      I've also added another protocolhander to play a YT playlist or channel if you know their id:
                      Code:
                      ytplaylist://[channelId | playlistId]=[id]
                      (without the [] of course)
                      LMS 8.2 on Odroid-C4 - SqueezeAMP!, 5xRadio, 5xBoom, 2xDuet, 1xTouch, 1xSB3. Sonos PLAY:3, PLAY:5, Marantz NR1603, Foobar2000, ShairPortW, 2xChromecast Audio, Chromecast v1 and v2, Squeezelite on Pi, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5, RivaArena 1 & 3

                      Comment

                      • FortFun
                        Junior Member
                        • Mar 2006
                        • 13

                        #12
                        Woooohoo!!

                        Thank you!!!!!

                        Comment

                        • beebopb
                          Junior Member
                          • Jul 2016
                          • 3

                          #13
                          I've added both repositories, but I actually don't see the youtube plugin in any of them. Has it been removed?

                          Comment

                          • beebopb
                            Junior Member
                            • Jul 2016
                            • 3

                            #14
                            I unchecked "Update plugins automatically" and now I see it at the top under 'Updated plugins available". However when I check the box to enable it and restart it never gets enabled. There are some errors in the log file:

                            Code:
                            [16-07-30 19:29:22.2399] main::init (384) Starting Logitech Media Server (v7.9.0, 1453144861, Mon Jan 18 19:29:24 UTC 2016) perl 5.010000
                            [16-07-30 19:29:22.4301] Slim::Utils::PluginDownloader::extract (102) error loading Archive::Zip Compress::Raw::Zlib object version 2.021 does not match bootstrap parameter 2.033 at /share/MD0_DATA/.qpkg/LogitechMediaServer/var/home/SqueezeboxServer/CPAN/arch/5.10/Compress/Raw/Zlib.pm line 98.
                            Compilation failed in require at /share/MD0_DATA/.qpkg/LogitechMediaServer/var/home/SqueezeboxServer/CPAN/Archive/Zip.pm line 11.
                            BEGIN failed--compilation aborted at /share/MD0_DATA/.qpkg/LogitechMediaServer/var/home/SqueezeboxServer/CPAN/Archive/Zip.pm line 11.
                            Compilation failed in require at /share/MD0_DATA/.qpkg/LogitechMediaServer/var/home/SqueezeboxServer/Slim/Utils/PluginDownloader.pm line 98.
                            [16-07-30 19:29:48.4572] Slim::Plugin::UPnP::Events::error (323) Subscribe/unsubscribe error: 412 Precondition Failed
                            [16-07-30 19:29:51.7749] Slim::Plugin::UPnP::Events::error (323) Subscribe/unsubscribe error: 412 Precondition Failed
                            [16-07-30 19:29:51.7892] Slim::Plugin::UPnP::Events::error (323) Subscribe/unsubscribe error: 412 Precondition Failed
                            A version mismatch on the Zlib CPAN module somewhere. Not quite sure what the correct resolution is though.

                            Comment

                            • beebopb
                              Junior Member
                              • Jul 2016
                              • 3

                              #15
                              I moved /share/MD0_DATA/.qpkg/LogitechMediaServer/var/home/SqueezeboxServer/CPAN/arch/5.10/Compress/Raw/Zlib.pm out of the way and it now works *shrug*

                              Comment

                              Working...