Sub SinemalarVeriCek()
Dim http As Object, html As Object
Dim movieResults As Object, movie As Object
Dim ws As Worksheet
Dim url As String, searchQuery As String
Dim i As Long
Dim posterUrl As String
Dim img As Picture
Dim sheetName As String
' "Arama" sayfasında A2 hücresinden arama terimini al
On Error Resume Next
searchQuery = Trim(ThisWorkbook.Sheets("Arama").Range("A2").Value)
On Error GoTo 0
' Eğer A2 hücresi boşsa hata ver
If searchQuery = "" Then
MsgBox "Lütfen 'Arama' sayfasında A2 hücresine bir arama sorgusu girin!", vbExclamation
Exit Sub
End If
' Türkçe karakterleri İngilizce karşılıklarına dönüştür
searchQuery = Replace(searchQuery, "Ç", "C")
searchQuery = Replace(searchQuery, "Ğ", "G")
searchQuery = Replace(searchQuery, "İ", "I")
searchQuery = Replace(searchQuery, "Ö", "O")
searchQuery = Replace(searchQuery, "Ş", "S")
searchQuery = Replace(searchQuery, "Ü", "U")
searchQuery = Replace(searchQuery, "ç", "c")
searchQuery = Replace(searchQuery, "ğ", "g")
searchQuery = Replace(searchQuery, "ı", "i")
searchQuery = Replace(searchQuery, "ö", "o")
searchQuery = Replace(searchQuery, "ş", "s")
searchQuery = Replace(searchQuery, "ü", "u")
' Geçersiz karakterleri temizle ve sayfa adını oluştur
sheetName = Replace(searchQuery, "/", "_")
sheetName = Replace(sheetName, "\", "_")
sheetName = Replace(sheetName, ":", "_")
sheetName = Replace(sheetName, "*", "_")
sheetName = Replace(sheetName, "?", "_")
sheetName = Replace(sheetName, "[", "_")
sheetName = Replace(sheetName, "]", "_")
' Sayfa adının 31 karakterden uzun olmamasını sağla
If Len(sheetName) > 31 Then sheetName = Left(sheetName, 31)
' Aynı isimde bir sayfa varsa, uyarı ver
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sheetName)
On Error GoTo 0
If Not ws Is Nothing Then
MsgBox "Aynı isimde bir sayfa zaten mevcut. İşleme devam edilemez.", vbExclamation
Exit Sub
End If
' Yeni bir çalışma sayfası oluştur
Set ws = ThisWorkbook.Sheets.Add
ws.Name = sheetName
ws.Cells(1, 2).Value = "Film Adı"
ws.Cells(1, 3).Value = "Orijinal Adı"
ws.Cells(1, 4).Value = "Tür"
ws.Cells(1, 5).Value = "Bilgi"
ws.Cells(1, 6).Value = "Bağlantı"
ws.Cells(1, 7).Value = "Oyuncular"
ws.Cells(1, 8).Value = "Afiş"
' URL oluştur
url = "https://www.sinemalar.com/ara/?type=movies&q=" & Replace(searchQuery, " ", "%20")
' HTTP ve HTML nesneleri
Set http = CreateObject("MSXML2.XMLHTTP")
Set html = CreateObject("HTMLFILE")
' Web sayfasını al
http.Open "GET", url, False
http.send
html.body.innerHTML = http.responseText
' Filmleri seç
Set movieResults = html.getElementsByClassName("movie")
For i = 0 To movieResults.Length - 1
Set movie = movieResults.Item(i)
With ws
' Film bilgilerini çıkar
.Cells(i + 2, 2).Value = movie.getElementsByClassName("name")(0).innerText ' Film Adı
.Cells(i + 2, 3).Value = movie.getElementsByClassName("org-name")(0).innerText ' Orijinal Adı
.Cells(i + 2, 4).Value = movie.getElementsByClassName("genre")(0).innerText ' Tür
.Cells(i + 2, 5).Value = movie.getElementsByClassName("item")(0).getElementsByClassName("text")(0).innerText ' Bilgi
.Cells(i + 2, 6).Value = movie.href ' Bağlantı
' Oyuncu bilgilerini çıkar
On Error Resume Next
Dim actors As Object
Dim actorNames As String
Set actors = movie.getElementsByClassName("side-info")(1).getElementsByTagName("span")
If Not actors Is Nothing Then
actorNames = ""
For Each actor In actors
actorNames = actorNames & actor.innerText & ", "
Next actor
actorNames = Left(actorNames, Len(actorNames) - 2) ' Son virgülü kaldır
.Cells(i + 2, 7).Value = actorNames ' Oyuncular
Else
.Cells(i + 2, 7).Value = "Oyuncu bilgisi yok"
End If
On Error GoTo 0
' Afiş URL'sini al
On Error Resume Next
posterUrl = movie.getElementsByClassName("movie-poster")(0).getElementsByTagName("img")(0).getAttribute("src")
If posterUrl <> "" Then
' Afişi hücreye görsel olarak ekle
Set img = ws.Pictures.Insert(posterUrl)
With img
.ShapeRange.LockAspectRatio = msoFalse
.Left = ws.Cells(i + 2, 8).Left
.Top = ws.Cells(i + 2, 8).Top
.Width = 100 ' Resmin genişliği
.Height = 150 ' Resmin yüksekliği
End With
Else
.Cells(i + 2, 8).Value = "Afiş yok"
End If
On Error GoTo 0
End With
Next i
' Hücreleri AutoFit ile düzenle
ws.Columns("B:H").AutoFit
' Başarı mesajı
MsgBox "Veriler '" & sheetName & "' sayfasına başarıyla çekildi ve hücreler düzenlendi!", vbInformation
End Sub