/* See COPYING file for copyright and license details. */ #include #include #include #include #include #include #ifdef WINVER #define mkdir(D, M) _mkdir(D) #endif #include "util.h" #define usage "getbnbook " VERSION " - a barnes and noble book downloader\n" \ "usage: getbnbook [-n] isbn13\n" \ " -n download pages from numbers in stdin\n" \ " otherwise, all available pages will be downloaded\n" #define USESSL 0 #define URLMAX 2048 #define STRMAX 1024 #define MAXPAGES 9999 int pages[MAXPAGES]; int numpages; char urlpath[STRMAX]; char bookid[STRMAX]; char *bookdir; char cookies[COOKIEMAX]; int getpagelist() { char url[URLMAX]; char *buf = NULL; char *s, *l; int i, num; char avail[STRMAX]; numpages = 0; snprintf(url, URLMAX, "/DigBooks/viewer/bookviewmanager.aspx?op=getbookinfo&ean=%s", bookid); if(!get("search2.barnesandnoble.com", USESSL, url, cookies, NULL, &buf, 1)) return 1; /* find page url structure */ if((s=strstr(buf, "")) == NULL) { free(buf); return 1; } s+=strlen(""); l = strchr(s, '<'); for(i=0; s 3 || (argc == 3 && (argv[1][0]!='-' || argv[1][1] != 'n')) || (argc >= 2 && argv[1][0] == '-' && argv[1][1] == 'h')) { fputs(usage, stdout); return 1; } strncpy(bookid, argv[argc-1], STRMAX-1); bookid[STRMAX-1] = '\0'; bookdir = argv[argc-1]; /* get cookie */ if(get("www.barnesandnoble.com", USESSL, "/", NULL, cookies, &tmp, 0)) free(tmp); if(getpagelist()) { fprintf(stderr, "Could not find any pages for %s\n", bookid); return 1; } if(!((d = opendir(bookdir)) || !mkdir(bookdir, S_IRWXU))) { fprintf(stderr, "Could not create directory %s\n", bookdir); return 1; } if(d) closedir(d); if(argc == 2) { for(i=0; i