Avatar billede moejensen Nybegynder
15. december 2015 - 16:58 Der er 7 kommentarer og
1 løsning

Hente antalvisninger fra YouTube

Hej med jer,

Jeg skal have lavet en macro i et excel ark, der automatisk henter antal visninger på en række youtube videoer.

I første kolonne er der en lang række links på youtube videoer

I de følgende kolonner står der ex oktober 2015, november 2015, december 2015.

Hver måned skal jeg kunne starte scriptet som så løber linksne igennem og sætter antalvisninger ind
Avatar billede moejensen Nybegynder
16. december 2015 - 08:34 #1
Jeg har splittet spørgsmålet lidt op, så jeg i dette spg: http://www.eksperten.dk/spm/1007908 vil lave en funktion på min server der kan modtage et youtube ID og returnere antallet af visninger på en hjemmeside.

Jeg er derfor i dette spørgsmål ude efter hjælp til at lave excel delen, hvor den løber cellerne igennem, sender ID'et til en hjemmeside og får antal visninger retur.
Avatar billede supertekst Ekspert
16. december 2015 - 16:02 #2
Er ved at eksperimentere med udfordringen - har du et eksempel på YouTube, som jeg kan teste med.
Avatar billede moejensen Nybegynder
16. december 2015 - 20:23 #3
Hej Supertekst,

Det kan være en hvilken som helst video, så enhver burde kunne bruges som test :)
Avatar billede supertekst Ekspert
16. december 2015 - 23:24 #4
Rem En del af koden - p.t. kun 1 YouTube-id og opkald hertil

Rem Ekstra referencer er sat: Microsoft Internet Controls & Microsoft HTML Object Library
Rem VBA-koden er anbragt under det relevante ark i Excel

Dim Tekst As String, vTekst As String, tabel As Variant, x As Long, tæller As Long
Const ytKode = "jxzpgxd6qSY"
Sub testHentFraYT()
  tæller = hentTællerFraYouTube(ytKode)
End Sub
Private Function hentTællerFraYouTube(ytKode)
Dim ie As InternetExplorer
Dim html As HTMLDocument

    Set ie = New InternetExplorer
    ie.Visible = False
    ie.Navigate "https://www.youtube.com/watch?v=" & ytKode

    Do While ie.ReadyState <> READYSTATE_COMPLETE
        Application.StatusBar = "Vent venligst..."
        DoEvents
    Loop

    Set html = ie.Document
    ie.Visible = False
   
    Tekst = html.DocumentElement.innerHTML
   
    x = InStr(Tekst, "view-count")
    vTekst = Mid(Tekst, x + 12)
    tabel = Split(vTekst, "<")
    hentTællerFraYouTube = tabel(0)

    Set ie = Nothing
    Application.StatusBar = ""
End Function
Avatar billede moejensen Nybegynder
17. december 2015 - 07:24 #5
Super fedt at du giver det et skud.

Jeg skal lige høre, hvordan sætter jeg det ind i Excel, så jeg kan få den til at kører, og hvordan vil jeg kunne sætte det op så den gennemløber en hel kolonne med youtube videoer, og indsætter viewcount hele vejen ned?
Avatar billede supertekst Ekspert
17. december 2015 - 08:31 #6
For at sætte koden ind:
Højreklik på det relevante ark / vælg vis programkose / indsæt koden

For at køre makroer:
Under Excel indstillinger / sikkerhedscenter / tillad anvendelse af makroer

Indsæt de nævnte referencer:
Alt+F11 / VBA vinduet vises / i menuen under Tools / referencer / sæt x ved de 2 nævnte - er i alfabetisk rækkefølge  - gem

For at prøve koden p.t.:
I VBA vinduet under arket kan koden ses / placer markøren i den øverste SUB. Indsæt en stopklods ved at klikke på den grå ramme til venstre for End Sub. Her stopper processen så efter gennemløbet og ved at pege på variablen tæller med musen - kan værdien aflæses. Men først startes gennemløbet med F5

NB alt dette fordi resten af koden til automatisk udførelse endnu ikke er udført - kommer snarest.

Hvis du foretrækker det kan du sende en mail så returnerer jeg min model p.t. @-adresse under min profil.
Avatar billede moejensen Nybegynder
17. december 2015 - 08:59 #7
fantastisk, har endt dig en mail :)
Avatar billede supertekst Ekspert
17. december 2015 - 11:55 #8
Rem Version 2 - 17-12-15
Rem Ekstra referencer er sat: Microsoft Internet Controls & Microsoft HTML Object Library

Const startRække = 2                                'kan evt. justeres
Const startKolonne = 2                              '- " -
Dim antalKolonner As Integer, antalRækker As Integer, ræk As Integer, ytLink As String
Dim Tekst As String, vTekst As String, tabel As Variant, x As Long, tæller As Long
Sub HentFraYT()
    antalKolonner = ActiveCell.SpecialCells(xlLastCell).Column
    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = startRække To antalRækker
        ytLink = Range("A" & ræk)
        tæller = hentTællerFraYouTube(ytLink)
        indsætIkolonne tæller, ræk
    Next ræk
   
    ActiveSheet.Columns.AutoFit
End Sub
Private Sub indsætIkolonne(tæller, ræk)
Dim kol As Integer, mDåR As String
    mDåR = Format(Now, "mmm-yy")
   
    For kol = 2 To antalKolonner
        If Format(Cells(1, kol), "mmm-yy") = mDåR Then
            Cells(ræk, kol) = tæller
            Exit Sub
        End If
    Next kol
End Sub
Private Function hentTællerFraYouTube(ytKode)
Dim ie As InternetExplorer
Dim html As HTMLDocument

    Set ie = New InternetExplorer
    ie.Visible = False
    ie.Navigate "https://www.youtube.com/watch?v=" & ytKode

    Do While ie.ReadyState <> READYSTATE_COMPLETE
        Application.StatusBar = "Vent venligst..."
        DoEvents
    Loop

    Set html = ie.Document
    ie.Visible = False
   
    Tekst = html.DocumentElement.innerHTML
   
    x = InStr(Tekst, "view-count")
    vTekst = Mid(Tekst, x + 12)
    tabel = Split(vTekst, "<")
    hentTællerFraYouTube = tabel(0)

    Set ie = Nothing
    Application.StatusBar = ""
End Function
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Address = "$A$1" Then
        Cancel = True
        HentFraYT
    End If
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester