Skip to content

Commit

Permalink
feat: Allow API endpoint to be passed in, add more error messages.
Browse files Browse the repository at this point in the history
  • Loading branch information
TheAxeDude committed May 18, 2020
1 parent dcdc224 commit ea729e0
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 68 deletions.
99 changes: 69 additions & 30 deletions Grabazine.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func main() {
usernamePtr := flag.String("u", "", "Zinio Username")
passwordPtr := flag.String("p", "", "Zinio Password")
chromePtr := flag.String("c", "google-chrome", "Chrome executable")
zinioHostPtr := flag.String("e", "api-sec.ziniopro.com", "Zinio Host (Excluding port and URI Scheme). Known: `api-sec`, `api-sec-2`")

flag.Parse()

Expand All @@ -39,24 +40,30 @@ func main() {
os.Exit(1)
}
loginToken := GetLoginToken(initialToken, *usernamePtr, *passwordPtr)
issues := GetLibrary(loginToken)
fmt.Println("Found " + strconv.Itoa(len(issues.Data))+ " issues in library.")
issues := GetLibrary(loginToken, *zinioHostPtr)
fmt.Println("Found " + strconv.Itoa(len(issues.Data)) + " issues in library.")

fmt.Println("Loading HTML template")
template, _ := ioutil.ReadFile("template.html")

mydir, err := os.Getwd()
if err != nil {
fmt.Println(err)
}
//fmt.Println("Grabbing list of pages...")
if _, err := os.Stat(mydir + "/issue/"); os.IsNotExist(err) {
os.Mkdir(mydir+"/issue/", os.ModeDir)
}

for _, issue := range issues.Data {
issuePath := "./issue/" + strconv.Itoa(issue.Id)
issuePath := mydir + "/issue/" + strconv.Itoa(issue.Id)

completeName := "./issue/" + issue.Publication.Name + " - " + issue.Name + ".pdf"
completeName := mydir + "/issue/" + issue.Publication.Name + " - " + issue.Name + ".pdf"
if fileExists(completeName) {
fmt.Println("Issue already found: "+ issue.Publication.Name + " - " + issue.Name)
fmt.Println("Issue already found: " + issue.Publication.Name + " - " + issue.Name)
continue
}


pages := GetPages(loginToken, issue)
pages := GetPages(loginToken, issue, *zinioHostPtr)

var filenames []string

Expand All @@ -68,7 +75,7 @@ func main() {

htmldata := strings.Replace(string(template), "SVG_PATH", pages.Data[i].Source, -1)
//write html file, embedding svg
ioutil.WriteFile(pathString +".html", []byte(htmldata), 0644)
ioutil.WriteFile(pathString+".html", []byte(htmldata), 0644)

//convert to pdf

Expand All @@ -90,27 +97,22 @@ func main() {

_ = api.MergeCreateFile(filenames, completeName, nil)


for _, fileName := range filenames{
for _, fileName := range filenames {
_ = os.Remove(fileName)
}
}


//

fmt.Println("Terminating the application...")
}

func GetPages(userToken LoginResponse, issue LibraryData) Response {
func GetPages(userToken LoginResponse, issue LibraryData, endpoint string) Response {

client := &http.Client{
}
client := &http.Client{}

req, _ := http.NewRequest("GET", "https://api-sec-2.ziniopro.com/newsstand/v2/newsstands/101/issues/"+strconv.Itoa(issue.Id)+"/content/pages?format=svg&application_id=9901&css_content=true&user_id="+ userToken.Data.User.UserIDString, nil)
req, _ := http.NewRequest("GET", "https://"+endpoint+"/newsstand/v2/newsstands/101/issues/"+strconv.Itoa(issue.Id)+"/content/pages?format=svg&application_id=9901&css_content=true&user_id="+userToken.Data.User.UserIDString, nil)

req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "bearer " + userToken.Data.Token.AccessToken)
req.Header.Add("Authorization", "bearer "+userToken.Data.Token.AccessToken)

resp, _ := client.Do(req)
data, _ := ioutil.ReadAll(resp.Body)
Expand Down Expand Up @@ -138,11 +140,10 @@ func GetInitialToken() (token string, err error) {
return string(found[2]), nil
}

func GetLoginToken(initialToken string, username string, password string) LoginResponse{
client := &http.Client{
}
func GetLoginToken(initialToken string, username string, password string) LoginResponse {
client := &http.Client{}

var jsonStr = []byte(`{"username":"`+username+`","password":"`+password+`"}`)
var jsonStr = []byte(`{"username":"` + username + `","password":"` + password + `"}`)
req, _ := http.NewRequest("POST", "https://www.zinio.com/api/login?project=99&logger=null", bytes.NewBuffer(jsonStr))

req.Header.Add("Content-Type", "application/json")
Expand All @@ -159,16 +160,20 @@ func GetLoginToken(initialToken string, username string, password string) LoginR

}

func GetLibrary(userToken LoginResponse) LibraryResponse{
client := &http.Client{
}
func GetLibrary(userToken LoginResponse, endpoint string) LibraryResponse {
client := &http.Client{}

req, _ := http.NewRequest("GET", "https://api-sec-2.ziniopro.com/newsstand/v2/newsstands/101/users/"+ userToken.Data.User.UserIDString+"/library_issues", nil)
req, _ := http.NewRequest("GET", "https://"+endpoint+"/newsstand/v2/newsstands/101/users/"+userToken.Data.User.UserIDString+"/library_issues", nil)

req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "bearer " + userToken.Data.Token.AccessToken)
req.Header.Add("Authorization", "bearer "+userToken.Data.Token.AccessToken)

resp, err := client.Do(req)

if err != nil {
fmt.Println("Unable to get Library: " + err.Error())
}

resp, _ := client.Do(req)
data, _ := ioutil.ReadAll(resp.Body)

responseType := LibraryResponse{}
Expand All @@ -184,4 +189,38 @@ func fileExists(filename string) bool {
return false
}
return !info.IsDir()
}
}

type LoginResponse struct {
Status bool `json:"status"`
Data LoginData `json:"data"`
}

type LoginData struct {
User User `json:"user"`
Token Token `json:"token"`
RefreshToken string `json:"refreshToken"`
}

type User struct {
UserIDString string `json:"user_id_string"`
}

type Token struct {
AccessToken string `json:"access_token"`
}

type LibraryResponse struct {
Status bool `json:"status"`
Data []LibraryData `json:"data"`
}

type LibraryData struct {
Id int `json:"id"`
Name string `json:"name"`
Publication Publication `json:"publication"`
}

type Publication struct {
Name string `json:"name"`
}
17 changes: 0 additions & 17 deletions LibraryDto.go

This file was deleted.

21 changes: 0 additions & 21 deletions LoginDto.go

This file was deleted.

Binary file renamed built/zinigo.exe → built/Zinigo_Linux_AMD64_linux
100755 → 100644
Binary file not shown.
Binary file renamed built/zinigo → built/Zinigo_Windows_x64.exe
100755 → 100644
Binary file not shown.
47 changes: 47 additions & 0 deletions built/template.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<html>
<head>
<!--<style>
@media all {
@page { margin: 0px; }
body { margin-top: 0cm;
margin-left:auto;
}
}
</style>-->
<style>
html, body {
width: fit-content;
height: fit-content;
margin: 0px;
padding: 0px;
}
</style>

<style id=page_style>
@page { size: 100px 100px ; margin : 0px }
</style>
</head>
<body>
<object type="image/svg+xml" data="SVG_PATH" ></object>

<script>
window.onload = fixpage;

function fixpage() {

renderBlock = document.getElementsByTagName("html")[0];
renderBlockInfo = window.getComputedStyle(renderBlock)

// fix chrome page bug
fixHeight = parseInt(renderBlockInfo.height) + 1 + "px"

pageCss = `@page { size: \${renderBlockInfo.width} \${fixHeight} ; margin:0;}`
document.getElementById("page_style").innerHTML = pageCss
}
</script>
</body>


</html>

0 comments on commit ea729e0

Please sign in to comment.