Browse archive by date:
  • Skyhorse Signs New Goodkind Thriller

    Goodkind, whose primary American publisher is Tor, signed with Skyhorse, in part, because the indie press promised it could publish 'NEST' before the holidays, on November 15.

  • Book Deals: Week of September 12, 2016

    Nick Cannon, director and star of the forthcoming film 'King of the Dancehall,' sells a tie-in novel to St. Martin’s; Bloomsbury USA picks up two titles from Booker finalist Deborah Levy; and more.

  • The Making of 'The Making of Donald Trump'

    Over a frenzied 27 days, investigative reporter David Cay Johnston put together what would become 'The Making of Donald Trump,' which Melville House published in August.

  • Book Deals: Week of September 5, 2016

    In this week's column Tilar Mazzeo sells a nonfiction book about Alexander Hamilton's wife; Katherine Tegen Welcomes Cole’s ‘Daughter’; Klam Offers Her ‘Sisters’ to Riverhead; and more.

  • Book Deals: Week of August 29, 2016

    Norton lands Man Booker nominee Madeleine Thien; Beth Ferry's 'Scarecrow' lands at HarperCollins; and more.

  • William Morris Endeavor Acquires RWSG

    William Morris Endeavor has acquired the L.A.-based boutique literary agency Rabineau Wachter Sanford & Gillett (RWSG). Through the deal, principal RWSG agents, Sylvie Rabineau and Jill Holwager Gillett, will join WME's Book to Film/TV division as co-heads.

  • Book Deals: Week of August 22, 2016

    Viking Children’s nabs the latest by Sarah Dessen; Megan Miranda sells an adult psychological thriller for six figures; Robert Repino closes on the follow-up to Mort(e), his celebrated SF novel; and more in this week's notable book deals.

  • Book Deals: Week of August 15, 2016

    P.C.Cast and Kristin Cast take a new series to SMP; Kensington’s imprint Lyrical Press strikes a deal with French-Canadian author Chloe Duval; Robert Dugoni re-ups at Thomas & Mercer; and more in this week's notable book deals.

  • Book Deals: Week of August 8, 2016

    Abrams signs a new YA novel about an a cappella group at an elite boarding school; 'S.I.' writer S.L. Price sells a sports book to Grove/Atlantic; Bloomsbury picks up two poetry collections from English poet and rapper Kate Tempest; and more.

  • S&S to Publish Clinton/Kaine Campaign Book

    Simon & Schuster will publish Hillary Clinton and Tim Kaine’s official campaign book, 'Stronger Together,' on September 6.

  • Book Deals: Week of August 1, 2016

    Jenna Johnson closes her first acquisition at FSG; actress Alexandra Lydon sells a nonfiction work about the Boston P.D.; Philomel Books’ Jill Santopolo inks a deal for her adult debut; and more.

  • María Paulina Camejo: A New Latina Voice in Spanish Language Books

    HC Espanol acquired two originally self-published books Camejo, a young romance novelist they're excited to bring to a wider audience.

  • HarperCollins to Publish Found Novel by Late Michael Crichton

    The manuscript for 'Dragon Teeth,' which will be published in 2017, was discovered by Crichton's wife, who had been working on the Michael Crichton Archives.

  • Book Deals: Week of July 25, 2016

    Flatiron nabs a feminist twist on Snow White; Berkley lays down six figures for a debut thriller; Feiwel and Friends buys Ostrom's historical YA; and more.

  • Book Deals: Week of July 18, 2016

    TheLi.st cofounder Glynnis MacNicol sells her memoir; actor/comedian Brian Posehn opens up about nerdom for Da Capo; pop-up maestro Matthew Reinhart signs with Disney; and more.

  • Book Deals: Week of July 11, 2016

    Lisa See lands seven figures at Scribner; 'Rosie Project' author Graeme Simsion takes his latest to SMP; Edgar-winner Lou Berney closes a double with William Morrow; and more.

  • Book Deals: Week of July 4, 2016

    Berkley lands two debuts, one for six figures; an Instagram star gets “comic” at Abrams; and more in this week's notable book deals.

  • Book Deals: Week of June 27, 2016

    Razorbill buys an essay collection from a BuzzFeed editor; a University of Texas prof sells an epic science fiction fantasy poem; Broadway actress Alexandra Silber takes a novel—and a memoir—to Pegasus; and more.

  • Book Deals: Week of June 20, 2016

    Scribner buys an essay collection from a prison inmate, Andrew Neiderman extends his V.C. Andrews gig at Gallery, Jenny Han sells the final Lara Jean book to S&S, and more in this week's notable book deals.

  • Knopf Nabs New Paulo Coelho Novel

    Knopf has acquired the U.S. publishing rights to 'The Spy,' a new novel by Paulo Coelho. The book, by the bestselling author of 'The Alchemist,' is set for a November 22 release.

X
Stay ahead with
Tip Sheet!
Free newsletter: the hottest new books, features and more
X
X
X
Email Address

Password

Log In Lost Password

Parts of this site are only available to paying PW subscribers. Subscribers: to set up your digital access click here.

To subscribe, click here.

PW “All Access” site license members have access to PW’s subscriber-only website content. Simply close and relaunch your preferred browser to log-in. To find out more about PW’s site license subscription options please email: pw@pubservice.com.

If you have questions or need assistance setting up your account please email pw@pubservice.com or call 1-800-278-2991 (U.S.) or 1-818-487-2069 (all other countries), Monday-Friday between 5am and 5pm Pacific time for assistance.

Not Registered? Click here.
EVAL ERROR: syntax error at (eval 1664) line 207, near ""Read more about "$ENV"
Global symbol "$author" requires explicit package name at (eval 1664) line 207.
Global symbol "$html_title" requires explicit package name at (eval 1664) line 211.
Global symbol "$html_title" requires explicit package name at (eval 1664) line 211.
Global symbol "$default_title" requires explicit package name at (eval 1664) line 211.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 212.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 212.
Global symbol "$default_description" requires explicit package name at (eval 1664) line 212.
Global symbol "$meta_keywords" requires explicit package name at (eval 1664) line 213.
Global symbol "$meta_keywords" requires explicit package name at (eval 1664) line 213.
Global symbol "$default_keywords" requires explicit package name at (eval 1664) line 213.
Global symbol "$html_title" requires explicit package name at (eval 1664) line 215.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 216.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 217.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 218.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 219.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 220.
Global symbol "$twitter_description" requires explicit package name at (eval 1664) line 221.
Global symbol "$twitter_description" requires explicit package name at (eval 1664) line 222.
Global symbol "$twitter_description" requires explicit package name at (eval 1664) line 223.
Global symbol "$twitter_description" requires explicit package name at (eval 1664) line 224.
Global symbol "$meta_keywords" requires explicit package name at (eval 1664) line 225.
Global symbol "$html_title" requires explicit package name at (eval 1664) line 227.
Global symbol "$meta_keywords" requires explicit package name at (eval 1664) line 228.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 229.
Global symbol "$last_modified" requires explicit package name at (eval 1664) line 230.
Global symbol "$last_modified" requires explicit package name at (eval 1664) line 231.
Global symbol "$html_title" requires explicit package name at (eval 1664) line 234.
Global symbol "$default_image" requires explicit package name at (eval 1664) line 235.
Global symbol "$meta_description" requires explicit package name at (eval 1664) line 236.
Global symbol "$twitter_creator" requires explicit package name at (eval 1664) line 241.
Global symbol "$twitter_creator" requires explicit package name at (eval 1664) line 242.
Global symbol "$twitter_title" requires explicit package name at (eval 1664) line 244.
Global symbol "$twitter_description" requires explicit package name at (eval 1664) line 245.
Global symbol "$default_image" requires explicit package name at (eval 1664) line 246.
syntax error at (eval 1664) line 260, near "}
 }"
(eval 1664) has too many errors.

Code:
line 1: package tmpevalpackage;
line 2: sub doEval { 
line 3: 	my(@sel,%data,$html_title,$meta_description,$meta_keywords,$default_title,$default_description,$default_keywords,$last_modified);
line 4: 	my($twitter_creator,$twitter_title,$twitter_description);
line 5: 	
line 6: 	$default_title = 'Book Reviews, Bestselling Books & Publishing Business News | Publishers Weekly';
line 7: 	$default_keywords = 'book news, book reviews, bestselling books, book bestsellers, book publishing, best selling books, list of books, book business, publishing business';
line 8: 	$default_description = 'Publishers Weekly is the international news website of book publishing and bookselling including business news, reviews, bestseller lists, commentaries and more.';
line 9: 	
line 10: 	my $default_image = "http://www.publishersweekly.com/images/data/IMG/img/000/000/1-3.PNG";
line 11: 	
line 12: 	# try the topic (or subtopic)
line 13: 	if($LayoutManager::url_resolved_values{'TOPIC_TREE.nickname'}) {
line 14: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'TOPIC_TREE.nickname'},\%data);
line 15: 		if($data{'html_title'}) { $html_title = $data{'html_title'}; };
line 16: 		if($data{'meta_description'}) { $meta_description = $data{'meta_description'}; };
line 17: 		if($data{'meta_keywords'}) { $meta_keywords = $data{'meta_keywords'}; };
line 18: 
line 19: 		# we are in a subtopic get the topic and fill in missing fields
line 20: 		if($LayoutManager::url_values{'TOPIC'}) { 
line 21: 			&Database::Select('TOPIC_TREE','nickname',$LayoutManager::url_values{'TOPIC'},\@sel);
line 22: 			if(@sel == 1) {
line 23: 				&Database::GetRow($sel[0],'TOPIC_TREE',\%data);
line 24: 				if($data{'html_title'} && !$html_title) { $html_title = $data{'html_title'}; }
line 25: 				if($data{'meta_description'} && !$meta_description) { $meta_description = $data{'meta_description'}; }
line 26: 				if($data{'meta_keywords'} && !$meta_keywords) { $meta_keywords = $data{'meta_keywords'}; }
line 27: 			}
line 28: 		}
line 29: 	}
line 30: 
line 31: 	# fill in missing info from page
line 32: 	if($LayoutManager::url_resolved_values{'PAGE.description'}) {
line 33: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'PAGE.description'},\%data);
line 34: 		if(!$html_title) { $html_title = $data{'html_title'}; };
line 35: 		if(!$meta_description) { $meta_description = $data{'meta_description'}; };
line 36: 		if(!$meta_keywords) { $meta_keywords = $data{'meta_keywords'}; };
line 37: 	}
line 38: 	
line 39: 	# article takes precidence over topic and subtopic
line 40: 	if($LayoutManager::url_resolved_values{'ARTICLE.nickname'}) {
line 41: 		&Database::GetParentRow($LayoutManager::url_resolved_values{'ARTICLE.nickname'},\%data);
line 42: 		$html_title = $data{'headline'};
line 43: 		if($data{'title_web'}) { $html_title = $data{'title_web'}; $twitter_title = $data{'title_web'}; };
line 44: 		if($data{'html_title'}) { $html_title = $data{'html_title'}; };
line 45: 		if($data{'abstract_web'}) { $meta_description = $data{'abstract_web'}; $twitter_description = $data{'abstract_web'}; };
line 46: 		if($data{'meta_description'}) { $meta_description = $data{'meta_description'}; };
line 47: 		if($data{'meta_keywords'}) { $meta_keywords = $data{'meta_keywords'}; };
line 48: 		$last_modified = &GetLastModified($data{'pub_date'});
line 49: 		
line 50: 		my($canonical,%topic_data,%sub_topic_data,%issue_data);
line 51: 		if($data{'the_topic'}) {
line 52: 			&Database::GetRow($data{'the_topic'},'TOPIC_TREE',\%sub_topic_data);
line 53: 			&Database::GetParentRow($sub_topic_data{'parent'},\%topic_data);
line 54: 			$canonical = "http://www.publishersweekly.com/pw/by-topic/$topic_data{'nickname'}/$sub_topic_data{'nickname'}/article/$data{'nickname'}.html";
line 55: 		}
line 56: 		else {
line 57: 			if($data{'issue'}) {
line 58: 				&Database::GetRow($data{'issue'},'ISSUE',\%issue_data);
line 59: 				$canonical = "http://www.publishersweekly.com/pw/print/$issue_data{'date'}/$data{'nickname'}.html";
line 60: 			}
line 61: 		}
line 62: 		if($data{'the_photo'}) {
line 63: 			my(%image_data);
line 64: 			&Database::GetRow($data{'the_photo'},'ARTICLE_PHOTO',\%image_data);
line 65: 			if($image_data{'photo__file'}) {
line 66: 				$default_image = "http://www.publishersweekly.com/images/data/$image_data{'photo__file'}";
line 67: 			}
line 68: 		}
line 69: 		if($canonical) {
line 70: 			&Templates::SetMeta("<link rel=\"canonical\" href=\"$canonical\" />");
line 71: 		}
line 72: 	}
line 73: 
line 74: 	# reviews by ISBN
line 75: 	if($LayoutManager::url_values{'ISBN'}) {
line 76: 		my($isbn,@sel,$work,%issue_data);
line 77: 		$isbn = $LayoutManager::url_values{'ISBN'};
line 78: 		
line 79: 		$isbn =~ s/\-//g;
line 80: 		$default_image = "https://booklife.com/image-factory/http/localhost/amazongetcover/$isbn.jpg/w204.jpg";
line 81: 
line 82: 		&Database::Select('WORK_INSTANCE','isbn_std',$isbn,\@sel);
line 83: 
line 84: 		if(@sel) {
line 85: 			$work = $sel[0];
line 86: 			@sel = ();
line 87: 			&Database::Select('REVIEW','book',$work,\@sel);
line 88: 			
line 89: 			# my $root = "images/cached/INGRAM";
line 90: 			# my $row_path = $isbn;
line 91: 			# $row_path =~ s/^(...)(...)(...)(.*)/$1\/$2\/$3/;
line 92: 
line 93: 			# if(-e "/disk02/PW/htdocs/$root/$row_path/$isbn\.jpg"){
line 94: 			#	 $default_image = "http://www.publishersweekly.com/$root/$row_path/$isbn\.jpg";
line 95: 			# }
line 96: 			
line 97: 			if(@sel) {
line 98: 				&Database::FetchRow($sel[0],'REVIEW',\%data);
line 99: 				my($tmp) = $data{'info_line'};
line 100: 				$tmp =~ s/<[^>]+>//g;
line 101: 				$html_title = "$data{'category'} Book Review: $data{'title'} by $tmp";
line 102: 				$meta_description = substr($data{'body'},0,200);
line 103: 				if($data{'pub_date'}) {
line 104: 					$last_modified = &GetLastModified($data{'pub_date'});
line 105: 				}
line 106: 				else {
line 107: 					&Database::GetRow($data{'issue-UNRESOLVED'},'ISSUE',\%issue_data);
line 108: 					$last_modified = &GetLastModified($issue_data{'date'});
line 109: 				}
line 110: 
line 111: 				$twitter_creator = '@publisherswkly';
line 112: 				$twitter_title = $data{'title'};
line 113: 				$twitter_description = $meta_description;
line 114: 			}
line 115: 		}
line 116: 	}
line 117: 	
line 118: 	# reviews
line 119: 	if($LayoutManager::url_resolved_rows{'REVIEW.nickname'}) {
line 120: 		my(%issue_data);
line 121: 		&Database::FetchRow($LayoutManager::url_resolved_rows{'REVIEW.nickname'},'REVIEW',\%data);
line 122: 		my($tmp) = $data{'info_line'};
line 123: 		$tmp =~ s/<[^>]+>//g;
line 124: 		$html_title = "$data{'category'} Review: $data{'title'} by $tmp";
line 125: 		$meta_description = substr($data{'body'},0,200);
line 126: 		
line 127: 		$twitter_creator = '@publisherswkly';
line 128: 		$twitter_title = $data{'title'};
line 129: 		$twitter_description = $meta_description;
line 130: 		
line 131: 		if($data{'pub_date'}) {
line 132: 			$last_modified = &GetLastModified($data{'pub_date'});
line 133: 		}
line 134: 		else {
line 135: 			&Database::GetRow($data{'issue-UNRESOLVED'},'ISSUE',\%issue_data);
line 136: 			$last_modified = &GetLastModified($issue_data{'date'});
line 137: 		}
line 138: 
line 139: 		if($data{'book-UNRESOLVED'}){
line 140: 			my (%instance_data);
line 141: 			&Database::GetRow($data{'book-UNRESOLVED'},'WORK_INSTANCE',\%instance_data);
line 142: 			
line 143: 			my $tmpisbn = $instance_data{'isbn_std'};
line 144: 			$tmpisbn =~ s/\-//g;
line 145: 			$default_image = "https://booklife.com/image-factory/http/localhost/amazongetcover/$tmpisbn.jpg/w204.jpg";
line 146: 
line 147: 			# my $root = "images/cached/INGRAM";
line 148: 			# my $row_path = $instance_data{'isbn_std'};
line 149: 			# $row_path =~ s/^(...)(...)(...)(.*)/$1\/$2\/$3/;
line 150: 	
line 151: 			# if(-e "/disk02/PW/htdocs/$root/$row_path/$instance_data{'isbn_std'}\.jpg"){
line 152: 			# 	$default_image = "http://www.publishersweekly.com/$root/$row_path/$instance_data{'isbn_std'}\.jpg";
line 153: 			# }
line 154: 		}
line 155: 	}
line 156: 
line 157: 	if($Templates::in{'channel'} && $Templates::in{'podcast'}) {
line 158: 		my(%podcast_data);
line 159: 		&Database::GetRow($Templates::in{'podcast'},'PODCAST',\%podcast_data);
line 160: 		$html_title = $podcast_data{'title'};
line 161: 		if($podcast_data{'description'}) { $meta_description = $podcast_data{'description'}; }
line 162: 		if($podcast_data{'image__file'}) {
line 163: 			$default_image = "http://www.publishersweekly.com/images/data/$podcast_data{'image__file'}";
line 164: 		}
line 165: 		$last_modified = &GetLastModified($podcast_data{'date_posted'});
line 166: 	}
line 167: 	
line 168: 	if($Templates::path =~ /\/bookit\//) {
line 169: 		if($Templates::in{'record'}) {
line 170: 			my(%data);
line 171: 			&Database::GetRow($Templates::in{'record'},'MARKETING_CALL',\%data);
line 172: 			$html_title = "$data{'headline'} | Publishers Weekly";
line 173: 		}
line 174: 		else {
line 175: 			$html_title = "BookIt | Publishers Weekly";	
line 176: 		}
line 177: 	}
line 178: 	if($Templates::path =~ /\/newsbrief\//) {
line 179: 		if($Templates::in{'record'}) {
line 180: 			my(%data);
line 181: 			&Database::GetRow($Templates::in{'record'},'NEWS_BRIEFS',\%data);
line 182: 			$html_title = "$data{'headline'}";
line 183: 			$twitter_title = "$data{'headline'}";
line 184: 			$meta_description = "$data{'abstract'}";
line 185: 			$twitter_description = "$data{'abstract'}";
line 186: 			if($data{'image__file'}) {
line 187: 				$default_image = "http://www.publishersweekly.com/images/data/$data{'image__file'}";
line 188: 			}
line 189: 		}
line 190: 		else {
line 191: 			$html_title = "BookIt | Publishers Weekly";	
line 192: 		}
line 193: 	}
line 194: 
line 195: 	if($Templates::path =~ /\/charlie\//) {
line 196: 			$html_title = "Publishers Weekly's Tribute to Freedom of Expression";
line 197: 			$twitter_title = "Publishers Weekly's Tribute to Freedom of Expression";
line 198: 			$meta_description = "Find out how to participate in a special section of the January 19 issue of Publishers Weekly and raise money for international nonprofits dedicated to freedom of expression.";
line 199: 			$twitter_description = "Find out how to participate in a special section of the January 19 issue of Publishers Weekly and raise money for international nonprofits dedicated to freedom of expression.";
line 200: 	}
line 201: 	
line 202: 	if($Templates::path =~ /\/authorpage\//) {
line 203: 		my $author = $LayoutManager::url_values{'AUTHORNAME'};
line 204: 		$author =~ s/-/ /g;
line 205: 		$author =~ s/([\w']+)/\u\L$1/g;
line 206: 		$html_title = "Books by $author and Complete Book Reviews";
line 207: 		$meta_description = "Read more about "" and other books by $author";
line 208: 	}
line 209: 
line 210: 	# use defailts is nothing else found
line 211: 	if(!$html_title) { $html_title = $default_title; };
line 212: 	if(!$meta_description) { $meta_description = $default_description; };
line 213: 	if(!$meta_keywords) { $meta_keywords = $default_keywords; };
line 214: 	
line 215: 	$html_title =~ s/\"//g;
line 216: 	$meta_description =~ s/\"//g;
line 217: 	$meta_description =~ s/<\/[^>]*>//g;
line 218: 	$meta_description =~ s/<[^>]*>//g;
line 219: 	$meta_description =~ s/<\/[^>]*//g;
line 220: 	$meta_description =~ s/<[^>]*//g;
line 221: 	$twitter_description =~ s/<\/[^>]*>//g;		
line 222: 	$twitter_description =~ s/<[^>]*>//g;
line 223: 	$twitter_description =~ s/<\/[^>]*//g;		
line 224: 	$twitter_description =~ s/<[^>]*//g;		
line 225: 	$meta_keywords =~ s/\"//g;
line 226: 	
line 227: 	&Templates::SetTitle($html_title);
line 228: 	&Templates::SetMeta("<meta name=\"keywords\" content=\"$meta_keywords\">");
line 229: 	&Templates::SetMeta("<meta name=\"description\" content=\"$meta_description\">");
line 230: 	if($last_modified) {
line 231: 		&Templates::SetMeta("<meta http-equiv=\"last-modified\" content=\"$last_modified\">");	
line 232: 	}
line 233: 	&Templates::SetMeta("<meta property=\"og:type\" content=\"article\"/>"); 
line 234: 	&Templates::SetMeta("<meta property=\"og:title\" content=\"$html_title\"/>"); 
line 235: 	&Templates::SetMeta("<meta property=\"og:image\" content=\"$default_image\"/>"); 
line 236: 	&Templates::SetMeta("<meta property=\"og:description\" content=\"$meta_description\"/>");
line 237: 	&Templates::SetMeta("<meta property=\"og:site_name\" content=\"PublishersWeekly.com\"/>"); 
line 238: 
line 239: 	&Templates::SetMeta("<meta name=\"twitter:card\" content=\"summary\"/>");		
line 240: 	&Templates::SetMeta("<meta name=\"twitter:site\" content=\"\@publisherswkly\"/>");		
line 241: 	if($twitter_creator){
line 242: 		&Templates::SetMeta("<meta name=\"twitter:creator\" content=\"$twitter_creator\"/>");			
line 243: 	}
line 244: 	&Templates::SetMeta("<meta name=\"twitter:title\" content=\"$twitter_title\"/>");
line 245: 	&Templates::SetMeta("<meta name=\"twitter:description\" content=\"$twitter_description\"/>");			
line 246: 	&Templates::SetMeta("<meta name=\"twitter:image\" content=\"$default_image\"/>"); 
line 247: 
line 248: 	
line 249: 	sub GetLastModified {
line 250: 		my($timestamp) = @_;
line 251: 		
line 252: 		my($mod);
line 253: 		
line 254: 		if(length($timestamp > 8)) {
line 255: 			$mod = substr($timestamp,0,4) . '-' . substr($timestamp,4,2) . '-' . substr($timestamp,6,2);
line 256: 		}
line 257: 		
line 258: 		return $mod;
line 259: 	}
line 260:  };
line 261: &doEval();
line 262: 1;