Skip to content

Commit 1981a44

Browse files
committed
add faraway scraper
1 parent 999fcee commit 1981a44

File tree

6 files changed

+90
-34
lines changed

6 files changed

+90
-34
lines changed

example/seattle.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@
5050
"name": "Admiral Theater",
5151
"driver": "faraway",
5252
"driverArgs": {
53-
"location": "9383456",
54-
"url": "https://faraway.intensify-solutions.com/embed?location=9383456"
53+
"location": "9383456"
5554
}
5655
},
5756
{

internal/scraper/elevent.go

+6-13
Original file line numberDiff line numberDiff line change
@@ -64,28 +64,21 @@ func (s eleventScraper) Scrape(ch chan<- []model.Showtime, dates []time.Time, tz
6464
}
6565
}
6666

67-
when, err := time.Parse("2006-01-02T15:04:05", showtime.StartDateTime)
68-
localizedWhen := time.Date(when.Year(), when.Month(), when.Day(), when.Hour(), when.Minute(), 0, 0, tz)
67+
startDateTime, err := time.Parse("2006-01-02T15:04:05", showtime.StartDateTime)
68+
showtime := time.Date(
69+
startDateTime.Year(), startDateTime.Month(), startDateTime.Day(),
70+
startDateTime.Hour(), startDateTime.Minute(), 0, 0, tz)
6971
if err != nil {
7072
fmt.Print(err)
7173
continue
7274
}
7375

74-
// TODO: shared with kinoheld, possibly make a helper.
75-
dateInRange := false
76-
for _, date := range dates {
77-
date = date.In(tz)
78-
if localizedWhen.Year() == date.Year() && localizedWhen.Month() == date.Month() && localizedWhen.Day() == date.Day() {
79-
dateInRange = true
80-
break
81-
}
82-
}
83-
if !dateInRange {
76+
if !DateInRange(showtime, dates) {
8477
continue
8578
}
8679

8780
showtimes = append(showtimes, model.Showtime{
88-
Film: event.EventName, When: localizedWhen, Language: "", DeepLink: "",
81+
Film: event.EventName, When: showtime, Language: "", DeepLink: "",
8982
Details: model.ShowtimeDetails{
9083
Description: event.Synopsis,
9184
ImageURL: event.EventImageURL,

internal/scraper/faraway.go

+66
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package scraper
22

33
import (
4+
"encoding/json"
45
"fmt"
6+
"net/http"
7+
"net/url"
8+
"strings"
59
"time"
610

711
"github.com/diurnalist/ourkino/internal/model"
@@ -11,9 +15,71 @@ type farawayScraper struct {
1115
Location string
1216
}
1317

18+
type FarawayRepertoireEvent struct {
19+
EventTimetable string `json:"event_timetable"`
20+
}
21+
22+
type FarawayRepertoireEventGroup struct {
23+
EventsCollection []FarawayRepertoireEvent `json:"events_collection"`
24+
}
25+
26+
type FarawayRepertoire struct {
27+
Title string
28+
Description string
29+
Picture1 string `json:"picture_1"`
30+
EventGroup []FarawayRepertoireEventGroup `json:"event_group"`
31+
}
32+
33+
type FarawayRepertoireWrapper struct {
34+
Data []FarawayRepertoire
35+
}
36+
1437
func (s farawayScraper) Scrape(ch chan<- []model.Showtime, dates []time.Time, tz *time.Location) error {
1538
showtimes := make([]model.Showtime, 0)
1639

40+
for _, date := range dates {
41+
reqUrl := "https://faraway.intensify-solutions.com/embed/ajaxGetRepertoire"
42+
data := url.Values{}
43+
data.Set("location", s.Location)
44+
data.Set("date", date.Format("2006-01-02"))
45+
res, err := http.Post(reqUrl, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
46+
if err != nil {
47+
return err
48+
}
49+
50+
var repertoire FarawayRepertoireWrapper
51+
defer res.Body.Close()
52+
json.NewDecoder(res.Body).Decode(&repertoire)
53+
54+
for _, rData := range repertoire.Data {
55+
if len(rData.EventGroup) != 1 {
56+
//Some entries have 0-length event groups; these can be ignored.
57+
continue
58+
}
59+
60+
for _, event := range rData.EventGroup[0].EventsCollection {
61+
timetableDate, err := time.Parse("2006-01-02 15:04", event.EventTimetable)
62+
if err != nil {
63+
return err
64+
}
65+
showtime := time.Date(
66+
timetableDate.Year(), timetableDate.Month(), timetableDate.Day(),
67+
timetableDate.Hour(), timetableDate.Minute(), 0, 0, tz)
68+
69+
showtimes = append(showtimes, model.Showtime{
70+
Film: rData.Title,
71+
When: showtime,
72+
Language: "",
73+
DeepLink: "",
74+
Details: model.ShowtimeDetails{
75+
Description: rData.Description,
76+
ImageURL: "https://faraway.intensify-solutions.com" + rData.Picture1,
77+
},
78+
})
79+
}
80+
}
81+
}
82+
1783
ch <- showtimes
1884

1985
return nil

internal/scraper/kinoheld.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,7 @@ func (s KinoheldScraper) Scrape(ch chan<- []model.Showtime, dates []time.Time, t
7272
return err
7373
}
7474

75-
dateInRange := false
76-
for _, date := range dates {
77-
date = date.In(tz)
78-
if showtime.Year() == date.Year() && showtime.Month() == date.Month() && showtime.Day() == date.Day() {
79-
dateInRange = true
80-
break
81-
}
82-
}
83-
if !dateInRange {
75+
if !DateInRange(showtime, dates) {
8476
continue
8577
}
8678

internal/scraper/util.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package scraper
2+
3+
import "time"
4+
5+
func DateInRange(date time.Time, dateRange []time.Time) bool {
6+
dateInRange := false
7+
for _, target := range dateRange {
8+
target = target.In(date.Location())
9+
if date.Year() == target.Year() && date.Month() == target.Month() && date.Day() == target.Day() {
10+
dateInRange = true
11+
break
12+
}
13+
}
14+
return dateInRange
15+
}

internal/scraper/yorck.go

+1-10
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,7 @@ func (s yorckScraper) Scrape(ch chan<- []model.Showtime, dates []time.Time, tz *
9999
return err
100100
}
101101

102-
// TODO: shared with kinoheld, possibly make a helper.
103-
dateInRange := false
104-
for _, date := range dates {
105-
date = date.In(tz)
106-
if showtime.Year() == date.Year() && showtime.Month() == date.Month() && showtime.Day() == date.Day() {
107-
dateInRange = true
108-
break
109-
}
110-
}
111-
if !dateInRange {
102+
if !DateInRange(showtime, dates) {
112103
continue
113104
}
114105

0 commit comments

Comments
 (0)