Code Monkey home page Code Monkey logo

serpapi-javascript's Introduction

SerpApi for JavaScript/TypeScript

npm version Deno version Build status License SerpApi Libraries

Scrape and parse search engine results using SerpApi. Get search results from Google, Bing, Baidu, Yandex, Yahoo, Home Depot, eBay and more.

🪧 Coming from google-search-results-nodejs?
Check out the migration document to find out how to upgrade.

Quick start

Node.js

  • Supports Node.js 7.10.1 and newer.
  • Refer to this example for help.
npm install serpapi
const { getJson } = require("serpapi");
getJson({
  engine: "google",
  api_key: API_KEY, // Get your API_KEY from https://serpapi.com/manage-api-key
  q: "coffee",
  location: "Austin, Texas",
}, (json) => {
  console.log(json["organic_results"]);
});

Node.js with ES Modules (ESM) and top-level await

  • If you prefer using the import syntax and top-level await, you need to use at least Node.js 14.8.0.
  • Refer to this example for help.

You will need to add "type": "module" to your package.json:

{
  "type": "module",
  // rest of package.json
}
import { getJson } from "serpapi";
const response = await getJson({
  engine: "google",
  api_key: API_KEY, // Get your API_KEY from https://serpapi.com/manage-api-key
  q: "coffee",
  location: "Austin, Texas",
});
console.log(response);

Deno

  • Import directly from deno.land.
  • Usage is otherwise the same as above.
  • Refer to this example for help.
import { getJson } from "https://deno.land/x/serpapi/mod.ts";
const response = await getJson({
  engine: "google",
  api_key: API_KEY, // Get your API_KEY from https://serpapi.com/manage-api-key
  q: "coffee",
  location: "Austin, Texas",
});
console.log(response);

Features

Configuration

You can declare a global api_key and timeout value by modifying the config object. timeout is defined in milliseconds and defaults to 60 seconds.

All functions, other than getLocations, accepts an optional api_key and timeout that will take precedence over the values defined in config.

getLocations doesn't require an API key.

import { config, getJson } from "serpapi";

config.api_key = API_KEY;
config.timeout = 60000;

await getJson({ engine: "google", q: "coffee" }); // uses the API key defined in the config
await getJson({ engine: "google", api_key: API_KEY_2, q: "coffee" }); // API_KEY_2 will be used

Pagination

Built-in pagination is not supported. Please refer to our pagination examples for a manual approach:

Functions

Table of Contents

getJson

Get a JSON response based on search parameters.

Parameters

  • parameters object search query parameters for the engine
  • callback fn? optional callback

Examples

// single call (async/await)
const json = await getJson({ engine: "google", api_key: API_KEY, q: "coffee" });

// single call (callback)
getJson({ engine: "google", api_key: API_KEY, q: "coffee" }, console.log);

getHtml

Get a HTML response based on search parameters.

  • Accepts an optional callback.
  • Responds with a JSON string if the search request hasn't completed.

Parameters

  • parameters object search query parameters for the engine
  • callback fn? optional callback

Examples

// async/await
const html = await getHtml({ engine: "google", api_key: API_KEY, q: "coffee" });

// callback
getHtml({ engine: "google", api_key: API_KEY, q: "coffee" }, console.log);

getJsonBySearchId

Get a JSON response given a search ID.

  • This search ID can be obtained from the search_metadata.id key in the response.
  • Typically used together with the async parameter.
  • Accepts an optional callback.

Parameters

  • searchId string search ID

  • parameters object (optional, default {})

    • parameters.api_key string? API key
    • parameters.timeout number? timeout in milliseconds
  • callback fn? optional callback

Examples

const response = await getJson({
  engine: "google",
  api_key: API_KEY,
  async: true,
  q: "coffee",
});
const { id } = response.search_metadata;
await delay(1000); // wait for the request to be processed.

// async/await
const json = await getJsonBySearchId(id, { api_key: API_KEY });

// callback
getJsonBySearchId(id, { api_key: API_KEY }, console.log);

getHtmlBySearchId

Get a HTML response given a search ID.

  • This search ID can be obtained from the search_metadata.id key in the response.
  • Typically used together with the async parameter.
  • Accepts an optional callback.
  • Responds with a JSON if the search request hasn't completed.

Parameters

  • searchId string search ID

  • parameters object (optional, default {})

    • parameters.api_key string? API key
    • parameters.timeout number? timeout in milliseconds
  • callback fn? optional callback

Examples

const response = await getJson({
  engine: "google",
  api_key: API_KEY,
  async: true,
  q: "coffee",
});
const { id } = response.search_metadata;
await delay(1000); // wait for the request to be processed.

// async/await
const html = await getHtmlBySearchId(id, { api_key: API_KEY });

// callback
getHtmlBySearchId(id, { api_key: API_KEY }, console.log);

getAccount

Get account information of an API key. https://serpapi.com/account-api

Parameters

  • parameters object (optional, default {})

    • parameters.api_key string? API key
    • parameters.timeout number? timeout in milliseconds
  • callback fn? optional callback

Examples

// async/await
const info = await getAccount({ api_key: API_KEY });

// callback
getAccount({ api_key: API_KEY }, console.log);

getLocations

Get supported locations. Does not require an API key. https://serpapi.com/locations-api

Parameters

  • parameters object (optional, default {})

    • parameters.q string? query for a location
    • parameters.limit number? limit on number of locations returned
    • parameters.timeout number? timeout in milliseconds
  • callback fn? optional callback

Examples

// async/await
const locations = await getLocations({ limit: 3 });

// callback
getLocations({ limit: 3 }, console.log);

serpapi-javascript's People

Contributors

freaky avatar hilmanski avatar sebastianquek avatar zyc9012 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

serpapi-javascript's Issues

TypeError: AbortSignal.timeout is not a function

          I seem to be getting the same on Node 17.

I'm calling getJson like so:

const params = {
  q: 'keyword',
  location: 'Greater London,England,United Kingdom',
  gl: 'gb',
  hl: 'en'
}
await getJson("google", params)

And I am getting the following error:

TypeError: AbortSignal.timeout is not a function
    at Object.execute (file:///<redacted>/node_modules/serpapi/esm/src/utils.js:80:29)
    at getJson (file:///<redacted>/node_modules/serpapi/esm/src/serpapi.js:58:39)

Originally posted by @pawKer in #4 (comment)

Better support for pagination

Goals

This module should make handling pagination simpler across all engines.

Context

Currently, pagination needs to be handled manually. One approach is the following:

import { config, getJson } from "serpapi";

config.api_key = process.env.API_KEY;

const num = 10; // Number of results per page
let start = 0; // Results offset

const links = [];

while (start < 50) { // Get up to 50 results
  const json = await getJson("google", {
    q: "coffee",
    location: "Austin, Texas",
    start,
    num,
  });
  const pageLinks = json["organic_results"].map((r) => r.link);
  links.push(...pageLinks);
  start += num;
}

console.log(links);

This works for engines that support the fetching of results by an offset + size. For example,

However, not all engines rely on this offset + size concept. For example,

For these less common approaches, users will need to be aware of it and update their code accordingly.

Full list of engines that support pagination

There are 7 types:

Offset only, e.g. google_jobs, yahoo
Engine Param Type Description
google_jobs start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
google_reverse_image start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
google_maps start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 20 is the 2nd page of results, 40 is the 3rd page of results, etc.).
google_events start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
yahoo b string Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 1 (default) is the first page of results, 11 is the 2nd page of results, 21 is the 3rd page of results, etc.).
yahoo_images b string Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 1 (default) starts from the first result, 61 starts from the 61st result, 121 starts from the 121st result, etc.).
yahoo_videos b string Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 1 (default) starts from the first result, 61 starts from the 61st result, 121 starts from the 121st result, etc.).
duckduckgo start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. When pagination is not being used (initial search request), number of organic_results can vary between 26 and 30. When pagination is being used (value of start parameter is bigger then 0), organic_results return 50 results.
yelp start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
yelp_reviews start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
Page only, e.g. yandex, apple_reviews
Engine Param Type Description
google (google images only) ijn string Parameter defines the page number for Google Images. There are 100 images per page. This parameter is equivalent to start (offset) = ijn * 100. This parameter works only for Google Images (set tbm to isch).
yandex p string Parameter defines page number. Pagination starts from 0.
yandex_images p string Parameter defines the page number. Pagination starts from 0, and it can return up to 30 results.
yandex_videos p string Parameter defines the page number. Pagination starts from 0, and it can return up to 30 results.
walmart_product_reviews page string Value is used to get the reviews on a specific page. (e.g., 1 (default) is the first page of results, 2 is the 2nd page of results, 3 is the 3rd page of results, etc.).
apple_reviews page string Parameter is used to get the items on a specific page. (e.g., 1 (default) is the first page of results, 2 is the 2nd page of results, 3 is the 3rd page of results, etc.).
Offset + size, e.g. google, bing, baidu
Engine Param Type Description
google start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
google num string Parameter defines the maximum number of results to return. (e.g., 10 (default) returns 10 results, 40 returns 40 results, and 100 returns 100 results).
google_scholar start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
google_scholar num string Parameter defines the maximum number of results to return, limited to 20. (e.g., 10 (default) returns 10 results, 20 returns 20 results).
google_scholar_author start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 20 is the 2nd page of results, 40 is the 3rd page of results, etc.).
google_scholar_author num string Parameter defines the number of results to return. (e.g., 20 (default) returns 20 results, 40 returns 40 results, etc.). Maximum number of results to return is 100.
bing first string Parameter controls the offset of the organic results. This parameter defaults to 1. (e.g., first=10 will move the 10th organic result to the first position).
bing count string Parameter controls the number of results per page. Minimum: 1, Maximum: 50. This parameter is only a suggestion and might not reflect actual results returned.
bing_news first string Parameter controls the offset of the organic results. This parameter defaults to 1. (e.g., first=10 will move the 10th organic result to the first position).
bing_news count string Parameter controls the number of results per page. This parameter is only a suggestion and might not reflect actual results returned.
bing_images first string Parameter controls the offset of the organic results. This parameter defaults to 1. (e.g., first=10 will move the 10th organic result to the first position).
bing_images count string Parameter controls the number of results per page. This parameter is only a suggestion and might not reflect the returned results.
baidu pn string Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
baidu rn string Parameter defines the maximum number of results to return, limited to 50. (e.g., 10 (default) returns 10 results, 30 returns 30 results, and 50 returns 50 results). This parameter is only available for desktop and tablet searches.
baidu_news pn string Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.).
baidu_news rn string Parameter defines the maximum number of results to return, limited to 50. (e.g., 10 (default) returns 10 results, 30 returns 30 results, and 50 returns 50 results).
Offset + page, e.g. google_product
Engine Param Type Description
google_product start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 0 (default) is the first page of results, 10 is the 2nd page of results, 20 is the 3rd page of results, etc.) This parameter works only for Google Online Sellers and Reviews.
google_product page string Parameter defines the page number for Google Online Sellers and Reviews. There are 10 results per page. This parameter is equivalent to start (offset) = page * 10. This parameter works only for Google Online Sellers and Reviews.
Page + size, e.g. ebay, walmart
Engine Param Type Description
ebay _pgn string Parameter defines the page number. It’s used for pagination. (e.g., 1 (default) is the first page of results, 2 is the 2nd page of results, 3 is the 3rd page of results, etc.).
ebay _ipg string Parameter defines the maximum number of results to return. There are total of four options: 25, 50 (default), 100 and 200 results.
walmart page string Value is used to get the items on a specific page. (e.g., 1 (default) is the first page of results, 2 is the 2nd page of results, 3 is the 3rd page of results, etc.). Maximum page value is 100.
walmart ps number Determines the number of items per page. There are scenarios where Walmart overrides the ps value. By default Walmart returns 40 results.
apple_app_store num string Parameter defines the number of results you want to get per each page. It defaults to 10. Maximum number of results you can get per page is 200. Any number greater than maximum number will default to 200.
apple_app_store page string Parameter is used to get the items on a specific page. (e.g., 0 (default) is the first page of results, 1 is the 2nd page of results, 2 is the 3rd page of results, etc.).
Offset + page + size, e.g. yahoo_shopping, home_depot
Engine Param Type Description
yahoo_shopping start number Parameter defines the result offset. It skips the given number of results. It’s used for pagination. (e.g., 1 (default) is the first page of results, 60 is the 2nd page of results, 120 is the 3rd page of results, etc.).
yahoo_shopping limit number Parameter defines the maximum number of results to return. (e.g., 10 (default) returns 10 results, 40 returns 40 results, and 100 returns 100 results).
yahoo_shopping page string The page parameter does the start parameter math for you! Just define the page number you want. Pagination starts from 1.
home_depot nao string Defines offset for products result. A single page contains 24 products. First page offset is 0, second -> 24, third -> 48 and so on.
home_depot page string Value is used to get the items on a specific page. (e.g., 1 (default) is the first page of results, 2 is the 2nd page of results, 3 is the 3rd page of results, etc.).
home_depot ps number Determines the number of items per page. There are scenarios where Home depot overrides the ps value. By default Home depot returns 24 results.
naver start number Parameter controls the offset of the organic results. This parameter defaults to 1 (except for the web). (e.g. The formula for all searches except the web is start = (page number * 10) - 9 e.g. Page number 3 (3 * 10) - 9 = 21) The formula for the web will be start = (page number * 15) - 29 e.g. Page number 3 (3 * 15) - 29 = 16.
naver num string Parameter defines the maximum number of results to return. 50 (default) returns 50 results. Maximum number of results to return is 100.Parameter can only be used with Naver Images API.
naver page string The page parameter does the start parameter math for you! Just define the page number you want. Pagination starts from 1.
Token only, e.g. google_scholar_profiles, google_play
Engine Parameter Type Description
google_scholar_profiles after_author string Parameter defines the next page token. It is used for retrieving the next page results. The parameter has the precedence over before_author parameter.
google_scholar_profiles before_author string Parameter defines the previous page token. It is used for retrieving the previous page results.
google_maps_photos next_page_token string Parameter defines the next page token. It is used for retrieving the next page results. 20 results are returned per page.
google_maps_reviews next_page_token string Parameter defines the next page token. It is used for retrieving the next page results.Usage of start parameter (results offset) has been deprecated by Google.
google_play next_page_token string Parameter defines the next page token. It is used for retrieving the next page results.

Possible approaches

The key question is how we might abstract the pagination logic in a manner that makes using SerpApi simpler and more ergonomic.

Approach 1: New function

  • New function getPaginatedJson that can be looped over.
const organicResults = [];
for await (const page of getPaginatedJson("google", { q: "coffee", start: 15 })) {
  organicResults.push(...page.organic_results);
  if (organicResults.length >= 50) break;
}

Pros

  • Types are clean.
  • Iterating over the function to get multiple page results is nice.

Cons

  • New function, might be confusing.
  • Not very ergonomic since if you want to get the next page, you need to call a different function.
  • Does not support callbacks.

Approach 2: Next method

  • getJson returns the results object that includes a next method.
const organicResults = [];
let page = await getJson("google", { q: "coffee", start: 15 });
while (page) {
  organicResults.push(...page.organic_results);
  if (organicResults.length >= 50) break;
  page = await page.next();
}

Pros

  • Ergonomic since if you want to get the next page, you can just call the next method on the result object.
  • Not a breaking change to existing implementations that use getJson.
  • Simpler to understand than using a brand new function.
  • Supports callbacks.

Cons

  • Cannot iterate over it to get multiple page results.

Approach 3: Magic?

  • getJson returns the results object as per normal.
  • If looped over, then it returns each page's results.
// calling once works
await getJson("google", { q: "coffee", start: 15 });

// calling within a loop works too
for await (const page of await getJson("google", { q: "coffee", start: 15 })) {
  organicResults.push(...page.organic_results);
  if (organicResults.length >= 50) break;
}

Pros

  • Works for single calls or when called in a loop.
  • Iterating over the function to get multiple page results is nice.
  • Not a breaking change to existing implementations that use getJson.
  • Simpler to understand than using a brand new function.

Cons

  • Does not support callbacks.
  • There are 2 awaits in the loop, might be confusing.
    • This is required because getJson returns a Promise that needs to be awaited to return an object that contains the fetched results and also the instructions necessary to continue the async loop. i.e. returns an async iterable object
  • Types are a little strange as it includes a [Symbol.asyncIterator] key which is required for the loop to work.

(Frontend Issue) Unhandled Runtime Error TypeError: Failed to fetch on React and Next JS

in the documentation it is written that is only need to use await without async but it is giving me syntax error, now i put async statement beforehand and suddenly it didnt fetch anything.

const response = async() => await getJson({
engine: "google_scholar_author",
author_id: ZZZ,
api_key: XXX // Get your API_KEY from https://serpapi.com/manage-api-key
});
console.log(response);

i have used the single callback version (without using fetch/async/await) it works but it cant be logged to the browser.. only on my vscode terminal meaning it only works serverside on node js. how am i suppose to pass this to the browser?

getJson(
{
engine: "google_scholar_author",
author_id: ZZZ,
api_key:
XXX,
},
(json) => {
json["articles"].forEach((article) => {
console.log(article.title);
setData((prev) =>[...prev, article.title]);
});
}
);

console.log(data)

Missing google_shopping engine from EngineMap

Hi,

I was trying to use the "google_shopping" engine in the getJson function but it looks like it is not in the EngineMap yet.

I would just like to know if this is going to be added soon or if I should use the previous version of the library?

TypeError: AbortSignal.timeout is not a function

Running into this issue with AbortSignal timeout function in typescript:

    at Object.execute (/Users/ashemagalhaes/Desktop/code/hearth/server/node_modules/serpapi/script/src/utils.js:109:29)
    at getJson (/Users/ashemagalhaes/Desktop/code/hearth/server/node_modules/serpapi/script/src/serpapi.js:61:50)
    at /Users/ashemagalhaes/Desktop/code/hearth/server/src/http/api/controllers/email.ts:196:29
    at Generator.next (<anonymous>)
    at /Users/ashemagalhaes/Desktop/code/hearth/server/src/http/api/controllers/email.ts:8:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/ashemagalhaes/Desktop/code/hearth/server/src/http/api/controllers/email.ts:4:12)
    at sendAllDailyEmails (/Users/ashemagalhaes/Desktop/code/hearth/server/src/http/api/controllers/email.ts:170:66)
    at Layer.handle [as handle_request] (/Users/ashemagalhaes/Desktop/code/hearth/server/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/ashemagalhaes/Desktop/code/hearth/server/node_modules/express/lib/router/route.js:144:13)```

Type error occurs when 'google_images' is used for the engine value of the getJson function.

I use getJson function with engine value 'google_images' like below

const params = {
      api_key: process.env.SERPAPI_SECRET_KEY,
      q: query,
    } satisfies GoogleParameters;
const response = await getJson('google_images', params);

It works well but there is type error Argument of type '"google_images"' is not assignable to parameter of type 'keyof EngineMap'.

Can you add google_images in EngineMap?

Uncaught (in promise) Error: Module not found "node:https".

Hi, when trying to use serpapi with Deno

import * as serpapi from "https://deno.land/x/[email protected]/mod.ts";

I run into the following error:

error: Uncaught (in promise) Error: Module not found "node:https".
      const ret = new Error(getStringFromWasm0(arg0, arg1));
                  ^
    at __wbg_new_8d2af00bc1e329ee (https://deno.land/x/[email protected]/eszip_wasm.generated.js:513:19)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:1559899)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:1398157)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:1895031)
    at __wbg_adapter_40 (https://deno.land/x/[email protected]/eszip_wasm.generated.js:229:6)
    at real (https://deno.land/x/[email protected]/eszip_wasm.generated.js:213:14)

I'm new to Deno, and not sure what I'm doing wrong. Any ideas?

Can't declare a global api_key

The documentation describes the possibility of declaring a global api_key.

Code that doesn't work:

import { config, getJson } from "serpapi";

config.api_key = process.env.API_KEY;

const engine = "apple_app_store";

const params = {
  term: "image viewer",
  country: "us",
  lang: "en-us",
  device: "desktop",
  num: "10",
  page: 0,
};

const json = await getJson(engine, params);
console.log("JSON: ", json);

Output:

JSON:  {
  error: 'Invalid API key. Your API key should be here: https://serpapi.com/manage-api-key'
}

Code that works:

import { getJson } from "serpapi";

const engine = "apple_app_store";

const params = {
  api_key: process.env.API_KEY,
  term: "image viewer",
  country: "us",
  lang: "en-us",
  device: "desktop",
  num: "10",
  page: 0,
};

const json = await getJson(engine, params);
console.log("JSON: ", json);

Output:

JSON:  {
  search_metadata: {
    id: '63971ad6e135088693c44f61',
    status: 'Success',
    json_endpoint: 'https://serpapi.com/searches/aaa6c13f6c0a76a0/63971ad6e135088693c44f61.json',
    created_at: '2022-12-12 12:13:10 UTC',
    processed_at: '2022-12-12 12:13:10 UTC',
    apple_app_store_url: 'https://itunes.apple.com/search?media=software&term=image+viewer&country=us&lang=en-us&entity=macSoftware&explicit=yes&limit=10&offset=0',
    raw_html_file: 'https://serpapi.com/searches/aaa6c13f6c0a76a0/63971ad6e135088693c44f61.html',
    prettify_html_file: 'https://serpapi.com/searches/aaa6c13f6c0a76a0/63971ad6e135088693c44f61.prettify',
    total_time_taken: 3.44
  },
  search_parameters: {
    engine: 'apple_app_store',
    term: 'image viewer',
    country: 'us',
    lang: 'en-us',
    device: 'desktop',
    num: '10',
    page: '0'
  },
      ...
}

P.S. my api_key was checked twice, it's valid.

Node version: 16.14.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.