Compare commits

...

13 Commits

Author SHA1 Message Date
2840715cb6 Add Twisted Spine, Gladys Books and Wine, and White Rabbit's Books
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-09-07 18:51:15 +00:00
5c6a07e87b Merge pull request 'Update dependency cheerio to v1.1.2' (#21) from renovate/cheerio-1.x-lockfile into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #21
2025-08-27 03:29:35 +00:00
cd0dd430c6 Merge pull request 'Update caddy Docker tag to v2.10.2' (#22) from renovate/caddy-2.x into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #22
2025-08-27 03:28:07 +00:00
115f5692e3 Update caddy Docker tag to v2.10.2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-08-25 22:01:59 +00:00
45c625994b Update dependency cheerio to v1.1.2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-08-22 16:02:24 +00:00
93aea2e385 All Shakespeare and Company stores have either closed or been taken over by The Strand.
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-08-09 20:08:33 +00:00
d5a43e291c Add the Fountain Bookshop
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-08-09 20:02:41 +00:00
f499b594da Merge pull request 'Update dependency cheerio to v1.1.0' (#20) from renovate/cheerio-1.x-lockfile into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #20
2025-06-09 01:22:02 +00:00
7beb704808 Update dependency cheerio to v1.1.0
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-06-08 20:01:29 +00:00
3f642f0a47 Merge pull request 'Update node Docker tag to v24' (#19) from renovate/node-24.x into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #19
2025-05-27 01:43:57 +00:00
c0450242ea Update node Docker tag to v24
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-05-06 22:01:54 +00:00
cb627abe06 Merge pull request 'Update caddy Docker tag to v2.10.0' (#18) from renovate/caddy-2.x into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #18
2025-04-22 13:27:41 +00:00
b56bcbc26d Update caddy Docker tag to v2.10.0
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-04-22 01:01:46 +00:00
3 changed files with 164 additions and 100 deletions

View File

@@ -1,9 +1,9 @@
FROM node:22 AS builder FROM node:24 AS builder
COPY . /src COPY . /src
WORKDIR /src WORKDIR /src
RUN npm install && node ./index.js RUN npm install && node ./index.js
FROM caddy:2.9.1 FROM caddy:2.10.2
COPY --from=builder /src/build /usr/share/caddy COPY --from=builder /src/build /usr/share/caddy

166
package-lock.json generated
View File

@@ -40,25 +40,24 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
}, },
"node_modules/cheerio": { "node_modules/cheerio": {
"version": "1.0.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
"integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
"license": "MIT",
"dependencies": { "dependencies": {
"cheerio-select": "^2.1.0", "cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domhandler": "^5.0.3", "domhandler": "^5.0.3",
"domutils": "^3.1.0", "domutils": "^3.2.2",
"encoding-sniffer": "^0.2.0", "encoding-sniffer": "^0.2.1",
"htmlparser2": "^9.1.0", "htmlparser2": "^10.0.0",
"parse5": "^7.1.2", "parse5": "^7.3.0",
"parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.1.0",
"parse5-parser-stream": "^7.1.2", "parse5-parser-stream": "^7.1.2",
"undici": "^6.19.5", "undici": "^7.12.0",
"whatwg-mimetype": "^4.0.0" "whatwg-mimetype": "^4.0.0"
}, },
"engines": { "engines": {
"node": ">=18.17" "node": ">=20.18.1"
}, },
"funding": { "funding": {
"url": "https://github.com/cheeriojs/cheerio?sponsor=1" "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
@@ -145,9 +144,9 @@
} }
}, },
"node_modules/domutils": { "node_modules/domutils": {
"version": "3.1.0", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dependencies": { "dependencies": {
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
@@ -158,9 +157,9 @@
} }
}, },
"node_modules/encoding-sniffer": { "node_modules/encoding-sniffer": {
"version": "0.2.0", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
"integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"dependencies": { "dependencies": {
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"whatwg-encoding": "^3.1.1" "whatwg-encoding": "^3.1.1"
@@ -181,9 +180,9 @@
} }
}, },
"node_modules/htmlparser2": { "node_modules/htmlparser2": {
"version": "9.1.0", "version": "10.0.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
"funding": [ "funding": [
"https://github.com/fb55/htmlparser2?sponsor=1", "https://github.com/fb55/htmlparser2?sponsor=1",
{ {
@@ -194,8 +193,19 @@
"dependencies": { "dependencies": {
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
"domhandler": "^5.0.3", "domhandler": "^5.0.3",
"domutils": "^3.1.0", "domutils": "^3.2.1",
"entities": "^4.5.0" "entities": "^6.0.0"
}
},
"node_modules/htmlparser2/node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
} }
}, },
"node_modules/iconv-lite": { "node_modules/iconv-lite": {
@@ -221,22 +231,22 @@
} }
}, },
"node_modules/parse5": { "node_modules/parse5": {
"version": "7.1.2", "version": "7.3.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dependencies": { "dependencies": {
"entities": "^4.4.0" "entities": "^6.0.0"
}, },
"funding": { "funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1" "url": "https://github.com/inikulin/parse5?sponsor=1"
} }
}, },
"node_modules/parse5-htmlparser2-tree-adapter": { "node_modules/parse5-htmlparser2-tree-adapter": {
"version": "7.0.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
"integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
"dependencies": { "dependencies": {
"domhandler": "^5.0.2", "domhandler": "^5.0.3",
"parse5": "^7.0.0" "parse5": "^7.0.0"
}, },
"funding": { "funding": {
@@ -254,6 +264,17 @@
"url": "https://github.com/inikulin/parse5?sponsor=1" "url": "https://github.com/inikulin/parse5?sponsor=1"
} }
}, },
"node_modules/parse5/node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/safer-buffer": { "node_modules/safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -285,12 +306,11 @@
} }
}, },
"node_modules/undici": { "node_modules/undici": {
"version": "6.21.2", "version": "7.15.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-7.15.0.tgz",
"integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", "integrity": "sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">=18.17" "node": ">=20.18.1"
} }
}, },
"node_modules/whatwg-encoding": { "node_modules/whatwg-encoding": {
@@ -338,20 +358,20 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
}, },
"cheerio": { "cheerio": {
"version": "1.0.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
"integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
"requires": { "requires": {
"cheerio-select": "^2.1.0", "cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domhandler": "^5.0.3", "domhandler": "^5.0.3",
"domutils": "^3.1.0", "domutils": "^3.2.2",
"encoding-sniffer": "^0.2.0", "encoding-sniffer": "^0.2.1",
"htmlparser2": "^9.1.0", "htmlparser2": "^10.0.0",
"parse5": "^7.1.2", "parse5": "^7.3.0",
"parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.1.0",
"parse5-parser-stream": "^7.1.2", "parse5-parser-stream": "^7.1.2",
"undici": "^6.19.5", "undici": "^7.12.0",
"whatwg-mimetype": "^4.0.0" "whatwg-mimetype": "^4.0.0"
} }
}, },
@@ -409,9 +429,9 @@
} }
}, },
"domutils": { "domutils": {
"version": "3.1.0", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"requires": { "requires": {
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
@@ -419,9 +439,9 @@
} }
}, },
"encoding-sniffer": { "encoding-sniffer": {
"version": "0.2.0", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
"integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"requires": { "requires": {
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"whatwg-encoding": "^3.1.1" "whatwg-encoding": "^3.1.1"
@@ -433,14 +453,21 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
}, },
"htmlparser2": { "htmlparser2": {
"version": "9.1.0", "version": "10.0.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
"requires": { "requires": {
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
"domhandler": "^5.0.3", "domhandler": "^5.0.3",
"domutils": "^3.1.0", "domutils": "^3.2.1",
"entities": "^4.5.0" "entities": "^6.0.0"
},
"dependencies": {
"entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="
}
} }
}, },
"iconv-lite": { "iconv-lite": {
@@ -460,19 +487,26 @@
} }
}, },
"parse5": { "parse5": {
"version": "7.1.2", "version": "7.3.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"requires": { "requires": {
"entities": "^4.4.0" "entities": "^6.0.0"
},
"dependencies": {
"entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="
}
} }
}, },
"parse5-htmlparser2-tree-adapter": { "parse5-htmlparser2-tree-adapter": {
"version": "7.0.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
"integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
"requires": { "requires": {
"domhandler": "^5.0.2", "domhandler": "^5.0.3",
"parse5": "^7.0.0" "parse5": "^7.0.0"
} }
}, },
@@ -506,9 +540,9 @@
} }
}, },
"undici": { "undici": {
"version": "6.21.2", "version": "7.15.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-7.15.0.tgz",
"integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==" "integrity": "sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ=="
}, },
"whatwg-encoding": { "whatwg-encoding": {
"version": "3.1.1", "version": "3.1.1",

View File

@@ -329,21 +329,6 @@
"cafe": "No", "cafe": "No",
"meta": "Three Lives & Company, in the West Village, Manhattan, is a gorgeous neighborhood bookstore with knowledgable staff and a selection of literary fiction." "meta": "Three Lives & Company, in the West Village, Manhattan, is a gorgeous neighborhood bookstore with knowledgable staff and a selection of literary fiction."
}, },
{
"name": "Shakespeare & Company",
"address": "939 Lexington Ave",
"city": "New York",
"state": "NY",
"postcode": "10065",
"description": "Sharing a name with the famous Parisian bookshop but no other official ties, this store has a general-interest selection of books on its main level and, downstairs, textbooks for the nearby colleges.",
"lat": "40.768188",
"long": "-73.963531",
"country": "USA",
"website": "https://shop.shakeandco.com/",
"events": "Yes",
"cafe": "Yes",
"meta": ""
},
{ {
"name": "Book Culture", "name": "Book Culture",
"address": "536 W 112th St", "address": "536 W 112th St",
@@ -1185,12 +1170,12 @@
"meta": "" "meta": ""
}, },
{ {
"name": "Shakespeare & Company (Upper West Side)", "name": "Strand Bookstore (Upper West Side)",
"address": "2020 Broadway", "address": "2020 Broadway",
"city": "New York", "city": "New York",
"state": "NY", "state": "NY",
"postcode": "10023", "postcode": "10023",
"description": "", "description": "Formerly Shakespeare and Company Lincoln Center.",
"lat": "40.776484", "lat": "40.776484",
"long": "-73.981811", "long": "-73.981811",
"country": "USA", "country": "USA",
@@ -1709,21 +1694,6 @@
"cafe": "Yes", "cafe": "Yes",
"meta": "" "meta": ""
}, },
{
"name": "Shakespeare & Company (Manhattan Valley/Columbia University)",
"address": "2736 Broadway",
"city": "New York",
"state": "NY",
"postcode": "10025",
"description": "",
"lat": "40.800259699774",
"long": "-73.96768731230581",
"country": "USA",
"website": "https://shop.shakeandco.com/",
"events": "Yes",
"cafe": "No",
"meta": ""
},
{ {
"name": "Liz's Book Bar", "name": "Liz's Book Bar",
"address": "315 Smith St", "address": "315 Smith St",
@@ -1798,5 +1768,65 @@
"events": "Yes", "events": "Yes",
"cafe": "Yes", "cafe": "Yes",
"meta": "" "meta": ""
},
{
"name": "The Fountain Bookshop",
"address": "803 W 187th St",
"city": "New York",
"state": "NY",
"postcode": "10033",
"description": "",
"lat": "40.85536319660771",
"long": "-73.9369908112493",
"country": "USA",
"website": "https://fountainbookshop.com/",
"events": "Yes",
"cafe": "Yes",
"meta": ""
},
{
"name": "Twisted Spine Books",
"address": "306 Grand St",
"city": "Brooklyn",
"state": "NY",
"postcode": "11211",
"description": "",
"lat": "40.71281455385764",
"long": "-73.95724940889518",
"country": "USA",
"website": "https://www.twistedspinebooks.com/",
"events": "Yes",
"cafe": "No",
"meta": ""
},
{
"name": "Gladys Books & Wine",
"address": "306 Malcolm X Blvd",
"city": "Brooklyn",
"state": "NY",
"postcode": "11233",
"description": "",
"lat": "40.682375148825216",
"long": "-73.92910519253844",
"country": "USA",
"website": "https://www.gladysbooksandwine.com/",
"events": "Yes",
"cafe": "Yes",
"meta": ""
},
{
"name": "White Rabbit's Books",
"address": "200 West 86th St",
"city": "New York",
"state": "NY",
"postcode": "10024",
"description": "",
"lat": "40.78773297148539",
"long": "-73.9754510091096",
"country": "USA",
"website": "https://whiterabbitsbooks.com/",
"events": "Yes",
"cafe": "No",
"meta": ""
} }
] ]