mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-06-20 16:58:30 +00:00
feat(routes): add discover route
This commit is contained in:
61
ui/app/api/discover/route.ts
Normal file
61
ui/app/api/discover/route.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import { searchSearxng } from '@/lib/searxng';
|
||||||
|
|
||||||
|
const articleWebsites = [
|
||||||
|
'yahoo.com',
|
||||||
|
'www.exchangewire.com',
|
||||||
|
'businessinsider.com',
|
||||||
|
/* 'wired.com',
|
||||||
|
'mashable.com',
|
||||||
|
'theverge.com',
|
||||||
|
'gizmodo.com',
|
||||||
|
'cnet.com',
|
||||||
|
'venturebeat.com', */
|
||||||
|
];
|
||||||
|
|
||||||
|
const topics = ['AI', 'tech']; /* TODO: Add UI to customize this */
|
||||||
|
|
||||||
|
export const GET = async (req: Request) => {
|
||||||
|
try {
|
||||||
|
const data = (
|
||||||
|
await Promise.all([
|
||||||
|
...new Array(articleWebsites.length * topics.length)
|
||||||
|
.fill(0)
|
||||||
|
.map(async (_, i) => {
|
||||||
|
return (
|
||||||
|
await searchSearxng(
|
||||||
|
`site:${articleWebsites[i % articleWebsites.length]} ${
|
||||||
|
topics[i % topics.length]
|
||||||
|
}`,
|
||||||
|
{
|
||||||
|
engines: ['bing news'],
|
||||||
|
pageno: 1,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
).results;
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
.map((result) => result)
|
||||||
|
.flat()
|
||||||
|
.sort(() => Math.random() - 0.5);
|
||||||
|
|
||||||
|
return Response.json(
|
||||||
|
{
|
||||||
|
blogs: data,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
status: 200,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`An error ocurred in discover route: ${err}`);
|
||||||
|
return Response.json(
|
||||||
|
{
|
||||||
|
message: 'An error has occurred',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
status: 500,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
@ -19,7 +19,7 @@ const Page = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/discover`, {
|
const res = await fetch(`/api/discover`, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
Reference in New Issue
Block a user