-
Notifications
You must be signed in to change notification settings - Fork 0
/
RSStoWikidata.ps1
163 lines (140 loc) · 12 KB
/
RSStoWikidata.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#Get URL
$Q ='Q7716807'
#'Q105098185','Q110555760','Q110555892','Q110555971','Q110568022','Q110568242','Q110568415','Q110568422','Q110568439','Q110568469','Q110568531','Q110568634','Q110568719','Q110568737','Q110573808','Q110573852','Q110573857','Q110573923','Q110573992','Q110574005','Q110574019','Q110574061','Q110574084','Q110574131','Q110574136','Q110574176','Q110574195','Q110574213','Q110574221','Q110574225','Q110574234','Q110574284','Q110574300','Q110574315','Q110574423','Q110574432','Q110574513','Q110574588','Q110574593','Q110574731','Q110574743','Q110574795','Q110574822','Q110574859','Q110574868','Q110574877','Q110574902','Q110574938','Q110574995','Q110575006','Q110575008','Q110575016','Q110575023','Q110575036','Q110575098','Q110575250','Q110575310','Q110575351','Q110575435','Q110580183','Q110580398','Q7627457','Q69624719','Q108841510','Q109247577','Q109374827','Q110555589','Q110568693','Q110568791','Q110568945','Q110573702','Q110574015','Q110574030','Q110574060','Q110574078','Q110574085','Q110574088','Q110574107','Q110574127','Q110574140','Q110574165','Q110574237','Q110574271','Q110574268','Q110574277','Q110574458','Q110574547','Q110574736','Q110574744','Q110574802','Q110574907','Q110574925','Q110575097','Q110575101','Q110575106','Q110575104','Q110575123','Q110785392','Q110829573','Q110854779','Q111792305','Q111906154','Q112262407','Q113950221','Q30640257','Q96409774','Q99762476','Q101011895','Q107657621','Q109379626','Q109535898','Q109539906','Q109614670','Q109673371','Q109746401','Q110137066','Q110555561','Q110555620','Q110555706','Q110555717','Q110555723','Q110555728','Q110555745','Q110555758','Q110555790','Q110555799','Q110555803','Q110555815','Q110555822','Q110555836','Q110555855','Q110555882','Q110555886','Q110555898','Q110555904','Q110555908','Q110555949','Q110555953','Q110555963','Q110555983','Q110555987','Q110556046','Q110556053','Q110556062','Q110568005','Q110568137','Q110568142','Q110568174','Q110568216','Q110568262','Q110568270','Q110568318','Q110568360','Q110568452','Q110568460','Q110568530','Q110568592','Q110568603','Q110568627','Q110568625','Q110568654','Q110568656','Q110568670','Q110568789','Q110568802','Q110568872','Q110568951','Q110573502','Q110573732','Q110574659','Q110574695','Q110574716','Q110574732','Q110574888','Q110574954','Q110574958','Q110574978','Q110575094','Q110575127','Q110575167','Q110575190','Q110575396','Q110575461','Q110575500','Q110580150','Q110580181','Q110946233','Q111080743','Q111475749','Q112081549','Q116455460','Q121563597','Q16988679','Q22084817','Q25141717','Q29152545','Q61963886','Q65073791','Q68792446','Q85815467','Q104992379','Q105424591','Q105425718','Q106253996','Q106690155','Q107389139','Q107548464','Q108167151','Q109218275','Q109533600','Q110555696','Q110555724','Q110555830','Q110555895','Q110555906','Q110555915','Q110555924','Q110568127','Q110568221','Q110568226','Q110568286','Q110568285','Q110568294','Q110568308','Q110568385','Q110568414','Q110568440','Q110568476','Q110568487','Q110568507','Q110568580','Q110568599','Q110568613','Q110568649','Q110568674','Q110568688','Q110568705','Q110568752','Q110568759','Q110568766','Q110568764','Q110568782','Q110568811','Q110568813','Q110568831','Q110568862','Q110568866','Q110568895','Q110568908','Q110568919','Q110568932','Q110568963','Q110573501','Q110573582','Q110573629','Q110574035','Q110574157','Q110574166','Q110574180','Q110574239','Q110574241','Q110574336','Q110574419','Q110574431','Q110574613','Q110574687','Q110574745','Q110574749','Q110574803','Q110574825','Q110574886','Q110575012','Q110575056','Q110575149','Q110575187','Q110575202','Q110575228','Q110575312','Q110575324','Q110575505','Q110580974','Q110581025','Q110597510','Q110617734','Q110623729','Q110652766','Q110657688','Q110682649','Q110732542','Q110777804','Q110944977','Q110970577','Q111043029','Q111324673','Q111340451','Q111945072','Q111950209','Q111969632','Q112128338','Q112704967','Q113882514','Q114387587','Q115009398','Q115210613','Q115360099','Q116448020','Q116455466','Q116455467','Q116455472','Q97331440','Q97933039','Q107335219','Q109335943','Q109610557','Q110555593','Q110555669','Q110555683','Q110555703','Q110555700','Q110555751','Q110555874','Q110556024','Q110568067','Q110568205','Q110568301','Q110568342','Q110568349','Q110568529','Q110573519','Q110573541','Q110573555','Q110573553','Q110573569','Q110573586','Q110573596','Q110573619','Q110573622','Q110573634','Q110573734','Q110573750','Q110573773','Q110573847','Q110573920','Q110574018','Q110574025','Q110574126','Q110574197','Q110574455','Q110574467','Q110574477','Q110574586','Q110575215','Q110575237','Q110575359','Q110575379','Q110575420','Q110580172','Q110580178','Q110580179','Q110580182','Q111343131','Q113646360','Q114458143','Q114985059','Q115007687','Q115014918','Q115120813','Q116235345','Q116455471','Q116786299','Q116813766','Q116864584','Q116872364','Q116880085','Q116907491','Q116921808','Q116923099','Q116947698','Q117191036','Q117222524','Q122676653','Q122721944','Q21829072','Q48817699','Q48967237','Q55267212','Q60049972','Q64809773','Q74303920','Q98605838','Q101012413','Q101093716','Q105425418','Q106153435','Q106311195','Q106810584','Q110555721','Q110555748','Q110555801','Q110555869','Q110555948','Q110555976','Q110556025','Q110568025','Q110568046','Q110568227','Q110568248','Q110568261','Q110568277','Q110568317','Q110568322','Q110568562','Q110568568','Q110568666','Q110568761','Q110573474','Q110573603','Q110573646','Q110573755','Q110573876','Q110573911','Q110573952','Q110573996','Q110574146','Q110574171','Q110574168','Q110574311','Q110574355','Q110574384','Q110574395','Q110574403','Q110574682','Q110574707','Q110574730','Q110574779','Q110574809','Q110574833','Q110574874','Q110575030','Q110575052','Q110612073','Q111016687','Q111161112','Q111211375','Q111461299','Q111470789','Q111544194','Q112208938','Q113909298','Q114290446','Q115015317','Q115805050','Q115862272','Q115923949','Q116263835','Q116431636','Q116455462','Q116455463','Q116455461','Q116455464','Q116455470','Q116455469','Q116502322','Q116695523','Q116697925','Q116740119','Q116740122','Q116740123','Q116740120','Q116740121','Q116740126','Q116740127','Q116740124','Q116740125','Q116740130','Q116740131','Q116740129','Q116740134','Q116740132','Q116740133','Q116740138','Q116740139','Q116740136','Q116740137','Q116740142','Q116740143','Q116740140','Q116740141','Q116740147','Q116740144','Q116740145','Q117327964','Q117349405','Q117349449','Q117756822','Q120019676','Q120262876','Q120484972','Q120485457','Q121760876'
#to do
# get the podcast logo URL and put it in P10286
# take <itunes:category text="Education"> and set it as genre
# get <link> and make it official website
function Send-Wikidata {
param (
$QID
)
$out =""
$language = @{
'en' = 'Q1860'
'de' = 'Q188'
'de-de' = 'Q188'
'fr' = 'Q150'
'es' = 'Q1321'
'en-us' = 'Q7976'
'en-ph' = 'Q1413694'
'en-gb' = 'Q7979'
'pl' = 'Q809'
'nl' = 'Q7411'
'pt-br' = 'Q750553'
'pt' = 'Q5146'
'en-au' ='Q44679'
'en-ca' = 'Q44676'
'en_US' = 'Q7976'
'es-mx' = 'Q616620'
'es_mx' = 'Q616620'
'es-ES'= 'Q1321'
'tr' = 'Q256'
'it' = 'Q652'
'hi'='Q1568'
'sv'='Q9027'
'nl=nl'='Q7411'
'nl-nl'='Q7411'
'nl-be'='Q1404296'
'el'='Q9129'
'en-za'='Q1156228'
'aa'='Q27811'
'ru'='Q7737'
'hu'='Q9067'
'en-pa'='Q2691385'
'fr-ca'='Q1450506'
'ja'='Q5287'
'ms'='Q9237'
}
#Retrieve the wikidata item and put in a variable called WD then show me what you got
$Response = Invoke-WebRequest -Uri "https://wikidata.org/w/rest.php/wikibase/v0/entities/items/$QID" -UseBasicParsing
If ($Response.StatusCode -ne "200") {
# WD failed to respond.
Write-Host "Message: $($Response.StatusCode) $($Response.StatusDescription)"
}
#Make a dictionary of the response from Wikidata
$WD = $response | ConvertFrom-Json
#$WD
#if more than one $URL=$WD.statements.p1019.value.content[1]
#if just one $URL=$WD.statements.p1019.value.content
#From the WIkidate Dictionary extra the value of the web feed URL
$URL = $WD.statements.p1019.value.content | Select-Object -first 1
# Go and get the RSS file
try {
$Response = Invoke-WebRequest -Uri "$URL" -UseBasicParsing -ContentType "application/xml"
$FeedXml = [xml]$Response.Content
# Exract recent entries (currently set for updated within the last 24 hours)
ForEach ($Entry in $FeedXml.feed.entry) {
$URL=$Entry
}
$chfeed = [xml](Invoke-WebRequest "$URL")
$URLencoded=[System.Web.HTTPUtility]::UrlEncode($URL)
#$chfeed.rss.channel.item | Select-Object pubDate
$countitems = 0
$highestepisode=0
[datetime] $oldestdate = "1972-08-14"
[datetime] $newestdate = "1972-08-14"
ForEach ($Entry in $chfeed.rss.channel.item) {
$found = $Entry.pubDate -match '(\d\d \w\w\w\ \d\d\d\d)'
#$found
if ($found) {
$epdate = $matches[1]
}
[datetime] $date = [datetime] $epdate
if ($oldestdate = "1972-08-14") { $oldestdate = $date }
#if ($newestdate="1972-08-14") {$newestdate=$date}
if ($date -lt $oldestdate) { $oldestdate = $date }
if ($date -gt $newestdate) { $newestdate = $date }
$countitems += 1
}
#Write-Output "For podcast $QID $countitems episodes found"
#$title=$chfeed.rss.channel.title.replace("|","%7C")
$date = Get-Date
$datestr = $date.ToString("yyyy-MM-dd")
#get the largest number of podcasts the wididata entry has
$amountnum=0
$currentcount=0
ForEach ($CountEntry in $WD.statements.p1113.value.content.amount) {
if ($CountEntry.length -gt 0) {$currentcount = $CountEntry.Substring(1)}
if ($currentcount -gt $amountnum) {$amountnum=$currentcount}
}
if ($countitems -gt ($amountnum+10)) {$out = "%7C%7C$QID%7CP1113%7C$countitems%7CP585%7C%2b$($datestr)T00:00:00Z%2F11%7CS854%7C%22$($URLencoded)%22"}
#Write-output $output
$lang = $chfeed.rss.channel.language.innertext
if ($lang.length -eq 0) {$lang = $chfeed.rss.channel.language}
#Write-Output "Its raw language is $lang"
$lang = $language[$lang.ToLower()]
if ($WD.statements.p407.value.content.length -eq 0){
$out += "%7C%7C$QID%7CP407%7C$($lang)%7CS854%7C%22$($URLencoded)%22"
}
#$chfeed.rss.channel.language
#Start-Process "chrome.exe" "$output"
#Write-output $out
#$title = [uri]::EscapeDataString($chfeed.rss.channel.title)
#$output="https://quickstatements.toolforge.org/#/v1=%7C%7C$QID%7CP1476%7C$($title)"
#Write-output $output
#$QID+"|P1476|"+$title+"|P580|"+$oldestdate+"|P1113|"+$countitems+"|S585|"+$date
#$oldestdate
#$newestdate
#$chfeed.rss.channel.subtitle
#If it doesn't have a home page get one from the feed
#Write-Output "For podcast $QID WD has *$($WD.statements.p856.value.content.length)* and the feed has $($chfeed.rss.channel.link| Where-Object { $_.rel.length -eq 0})"
if ($WD.statements.p856.value.content.length -eq 0){
# Write-Output "set it"
$homepage=$chfeed.rss.channel.link| Where-Object { $_.rel.length -eq 0}
$homepage=[System.Web.HTTPUtility]::UrlEncode($homepage)
$out += "%7C%7C$QID%7CP856%7C%22$homepage%22%7CP407%7C$($lang)%7CS854%7C%22$($URLencoded)%22"
}
}
catch {}
return $out
}
#$out += "%7C%7C$QID%7CP1019%7C$URL%7CP2241%7C$Q1193907"
$output = "https://quickstatements.toolforge.org/#/v1="
foreach ($Qitem in $Q) {
$itemoutput = Send-Wikidata($Qitem)
$output = $output + $itemoutput
}
Start-Process "chrome.exe" "$output"
$output
# Start-Process "chrome.exe" "$output"