Skip to content

Commit f22c070

Browse files
committed
edited tests to exclude mycoolmoviez
1 parent de33151 commit f22c070

9 files changed

+179
-7
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Gophie is a tool to help you search, stream and download movies from movie sites
2626
- FzMovies
2727
- BestHD
2828
- MyCoolMoviez
29+
- CoolMoviez
2930

3031
### Series
3132

cmd/list.go

-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ func processList(pageNum int, e engine.Engine, retrievedResult engine.SearchResu
118118
listPager(pageNum)
119119
}
120120
}
121-
122121
selectedMovie, err := result.GetMovieByTitle(choice)
123122
if err != nil {
124123
log.Fatal(err)

cmd/search.go

-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ func searchPager(param ...string) {
6161
log.Fatal(err)
6262
}
6363
selectedMovie := processSearch(selectedEngine, compResult, param...)
64-
log.Debug("Heyyyyy", len(selectedMovie.SDownloadLink))
65-
// log.Debugf("Movie: %v\n", selectedMovie)
6664
// Start Movie Download
6765
if len(selectedMovie.SDownloadLink) < 1 {
6866
if err = downloader.DownloadMovie(&selectedMovie, viper.GetString("output-dir")); err != nil {

cmd/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func ProcessFetchTask(fn fetchFunc) engine.SearchResult {
3838
// SelectOpts : use promptui to select amongst options
3939
func SelectOpts(title string, options []string) (int, string) {
4040
prompt := promptui.Select{
41-
Label: "",
41+
Label: title,
4242
Items: options,
4343
Size: 10,
4444
}

engine/coolmoviez.go

+169
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package engine
2+
3+
import (
4+
"fmt"
5+
"net/url"
6+
"path"
7+
"regexp"
8+
"strconv"
9+
"strings"
10+
11+
"github.com/gocolly/colly/v2"
12+
log "github.com/sirupsen/logrus"
13+
)
14+
15+
// CoolMoviez : An Engine for CoolMoviez
16+
type CoolMoviez struct {
17+
Props
18+
}
19+
20+
// NewCoolMoviezEngine : create a new engine for scraping mynewcoolmovies
21+
func NewCoolMoviezEngine() *CoolMoviez {
22+
base := "https://coolmoviez.buzz"
23+
baseURL, err := url.Parse(base)
24+
if err != nil {
25+
log.Fatal(err)
26+
}
27+
// Search URL
28+
searchURL, err := url.Parse(base)
29+
if err != nil {
30+
log.Fatal(err)
31+
}
32+
searchURL.Path = "/mobile/search"
33+
34+
// List URL
35+
listURL, err := url.Parse(base)
36+
if err != nil {
37+
log.Fatal(err)
38+
}
39+
listURL.Path = "/movielist/13/Hollywood_movies/default"
40+
41+
coolMoviesEngine := CoolMoviez{}
42+
coolMoviesEngine.Name = "CoolMoviez"
43+
coolMoviesEngine.BaseURL = baseURL
44+
coolMoviesEngine.Description = `Self reported best download site for mobile, tablets and pc`
45+
coolMoviesEngine.SearchURL = searchURL
46+
coolMoviesEngine.ListURL = listURL
47+
return &coolMoviesEngine
48+
}
49+
50+
// Engine Interface Methods
51+
52+
func (engine *CoolMoviez) String() string {
53+
st := fmt.Sprintf("%s (%s)", engine.Name, engine.BaseURL)
54+
return st
55+
}
56+
57+
func (engine *CoolMoviez) getParseAttrs() (string, string, error) {
58+
return "div.list", "div.fl", nil
59+
}
60+
61+
func (engine *CoolMoviez) parseSingleMovie(el *colly.HTMLElement, index int) (Movie, error) {
62+
movie := Movie{
63+
Index: index,
64+
IsSeries: false,
65+
Source: engine.Name,
66+
}
67+
movie.Title = strings.TrimSpace(el.ChildText("a.fileName"))
68+
appendage := el.ChildText("span")
69+
if strings.HasSuffix(movie.Title, appendage) {
70+
movie.Title = strings.TrimSuffix(movie.Title, appendage)
71+
}
72+
re := regexp.MustCompile(`(\d+)`)
73+
stringsub := re.FindStringSubmatch(movie.Title)
74+
if len(stringsub) > 0 {
75+
year, _ := strconv.Atoi(stringsub[0])
76+
movie.Year = year
77+
}
78+
downloadLink, err := url.Parse(el.Request.AbsoluteURL(el.ChildAttr("a", "href")))
79+
movie.CoverPhotoLink = el.ChildAttr("img", "src")
80+
81+
if err != nil {
82+
log.Fatal(err)
83+
}
84+
85+
movie.DownloadLink = downloadLink
86+
return movie, nil
87+
}
88+
89+
func (engine *CoolMoviez) updateDownloadProps(downloadCollector *colly.Collector, movies *[]Movie) {
90+
91+
downloadCollector.OnHTML("div.M1,div.M2", func(e *colly.HTMLElement) {
92+
reArray := []string{"Quality", "Genre", "Description", "Starcast"}
93+
movie := &(*movies)[getMovieIndexFromCtx(e.Request)]
94+
for _, reString := range reArray {
95+
re := regexp.MustCompile(reString + `:\s+(.*)`)
96+
stringsub := re.FindStringSubmatch(e.Text)
97+
if len(stringsub) > 1 {
98+
value := stringsub[1]
99+
switch reString {
100+
case "Quality":
101+
movie.Quality = value
102+
case "Description":
103+
movie.Description = value
104+
case "Genre":
105+
movie.Category = value
106+
case "Starcast":
107+
movie.Cast = value
108+
}
109+
}
110+
}
111+
})
112+
113+
downloadCollector.OnHTML("a.fileName", func(e *colly.HTMLElement) {
114+
movie := &(*movies)[getMovieIndexFromCtx(e.Request)]
115+
initialLink := e.Attr("href")
116+
117+
replacePrefix := "https://www.coolmoviez.buzz/file"
118+
if strings.HasPrefix(initialLink, replacePrefix) {
119+
downloadLink, err := url.Parse("https://www.coolmoviez.buzz/server" + strings.TrimPrefix(initialLink, replacePrefix))
120+
if err == nil {
121+
movie.DownloadLink = downloadLink
122+
downloadCollector.Visit(downloadLink.String())
123+
}
124+
}
125+
})
126+
127+
downloadCollector.OnHTML("a.dwnLink", func(e *colly.HTMLElement) {
128+
movie := &(*movies)[getMovieIndexFromCtx(e.Request)]
129+
downloadLink, err := url.Parse(e.Attr("href"))
130+
if err == nil {
131+
movie.DownloadLink = downloadLink
132+
}
133+
})
134+
}
135+
136+
// List : list all the movies on a page
137+
func (engine *CoolMoviez) List(page int) SearchResult {
138+
engine.mode = ListMode
139+
result := SearchResult{
140+
Query: "List of Recent Uploads - Page " + strconv.Itoa(page),
141+
}
142+
pageParam := fmt.Sprintf("%v.html", strconv.Itoa(page))
143+
engine.ListURL.Path = path.Join(engine.ListURL.Path, pageParam) + "/"
144+
movies, err := Scrape(engine)
145+
if err != nil {
146+
log.Fatal(err)
147+
}
148+
result.Movies = movies
149+
return result
150+
}
151+
152+
// Search : Searches fzmovies for a particular query and return an array of movies
153+
func (engine *CoolMoviez) Search(param ...string) SearchResult {
154+
query := param[0]
155+
engine.mode = SearchMode
156+
result := SearchResult{
157+
Query: query,
158+
}
159+
q := engine.SearchURL.Query()
160+
q.Set("find", query)
161+
q.Set("per_page", "1")
162+
engine.SearchURL.RawQuery = q.Encode()
163+
movies, err := Scrape(engine)
164+
if err != nil {
165+
log.Fatal(err)
166+
}
167+
result.Movies = movies
168+
return result
169+
}

engine/engine_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func testResults(t *testing.T, engine Engine) {
3535
}
3636
if movie.IsSeries == false {
3737
downloadlink := movie.DownloadLink.String()
38-
if !(strings.HasSuffix(downloadlink, "1") || strings.HasSuffix(downloadlink, ".mp4") || strings.Contains(downloadlink, ".mkv") || strings.Contains(downloadlink, ".avi") || strings.Contains(downloadlink, ".webm") || strings.Contains(downloadlink, "freeload") || strings.Contains(downloadlink, "download_token=") || strings.Contains(downloadlink, "mycoolmoviez")) {
38+
if !(strings.HasSuffix(downloadlink, "1") || strings.HasSuffix(downloadlink, ".mp4") || strings.Contains(downloadlink, ".mkv") || strings.Contains(downloadlink, ".avi") || strings.Contains(downloadlink, ".webm") || strings.Contains(downloadlink, "freeload") || strings.Contains(downloadlink, "download_token=") || strings.Contains(downloadlink, "mycoolmoviez") || strings.Contains(downloadlink, "server")) {
3939
t.Errorf("Could not obtain link for single movie, linked returned is %v", downloadlink)
4040
}
4141
}
@@ -46,7 +46,7 @@ func testResults(t *testing.T, engine Engine) {
4646
func TestEngines(t *testing.T) {
4747
engines := GetEngines()
4848
for _, engine := range engines {
49-
if !strings.HasPrefix(engine.String(), "NetNaija") {
49+
if !(strings.HasPrefix(engine.String(), "NetNaija") || strings.HasPrefix(engine.String(), "MyCoolMoviez")) {
5050
testResults(t, engine)
5151
}
5252
}

engine/engines.go

+4
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ type Movie struct {
162162
Year int
163163
IsSeries bool
164164
SDownloadLink map[string]*url.URL // Other links for downloads if movies is series
165+
Quality string
166+
Category string // csv of categories
167+
Cast string // csv of actors in movie
165168
UploadDate string
166169
Source string // The Engine From which it is gotten from
167170
}
@@ -237,6 +240,7 @@ func GetEngines() map[string]Engine {
237240
engines["besthdmovies"] = NewBestHDEngine()
238241
engines["tvseries"] = NewTvSeriesEngine()
239242
engines["mycoolmoviez"] = NewMyCoolMoviezEngine()
243+
engines["coolmoviez"] = NewCoolMoviezEngine()
240244
engines["animeout"] = NewAnimeOutEngine()
241245
return engines
242246
}

engine/mycoolmoviez.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (engine *MyCoolMoviez) updateDownloadProps(downloadCollector *colly.Collect
103103
genre = strings.TrimSpace(strings.TrimPrefix(text, "Genre :"))
104104
}
105105
}
106-
movie.Description = movie.Description + `\n` + genre
106+
movie.Category = genre
107107
})
108108

109109
downloadCollector.OnHTML("div.download", func(e *colly.HTMLElement) {

reference/Gophie.v1.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ info:
2929
- [FzMovies](https://www.fzmovies.net)
3030
- [BestHDMovies](https://besthdmovies.top)
3131
- [MyCoolMoviez](https://mycoolmoviez.site)
32+
- [CoolMoviez](https://www.coolmoviez.buzz)
3233
3334
### Series
3435

0 commit comments

Comments
 (0)