Free & open source API service for obtaining information about +9600 universities worldwide.

Overview

Universities is free & open source API service. 🎒

Features 🚀

  • Python FastAPI backend. 🔨
  • SQLAlchemy - models 📊
  • Asynchronous - Thanks to Uvicorn Universities API comes with a incredibly fast ASGI server, 🚀
  • Large database - Supports over +140 countries +9600 Universities 📡
  • Documentation - Have an automatic API documentation web user interface thanks to FastAPI
  • Open source - Everything from the code base is opensource and free to use under a permissive MIT license.

Try it online with the Documentation now!

How to use & query parameters 💡

You can search by:

  • Country /search?country=India or /search?country=United+States
  • Name /search?name=harvard
  • Alpha_two_code /search?alpha_two_code=FR
  • Domain /search?domain=uni-muenchen.de

Multiple querying & Auto completion

  • Name and Country /search?country=Brazil&name=Centro
  • Name and Alpha_two_code /search?name=oxford&alpha_two_code=gb

Example Response

{
    "name": "Ludwig-Maximilians-Universität München",
    "alpha_two_code": "DE",
    "country": "Germany",
    "web_pages": [
      "http://www.uni-muenchen.de/"
    ],
    "domains": [
      "uni-muenchen.de"
    ],
    "state_province": null
}

For Installation 📌

git clone https://github.com/ycd/universities.git
cd universities
virtulenv env
source env/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload

License

This project is licensed under the terms of the MIT license.

You might also like...
A free and open-source SMS/Call bombing application
A free and open-source SMS/Call bombing application

TBOMB V0.1 A free and open-source SMS/Call bombing application NOTE: For Termux To use the bomber type the following commands in Termux: pkg install g

Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support
Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

WallAlley.bot is an open source and free to use financial discord bot originaly build for WallAlley server's community

WallAlley.bot About WallAlley.bot is an open source and free to use financial discord bot originaly build for WallAlley server's community. All data a

This is a Python bot, which automates logging in, purchasing and planting the seeds. Open source bot and completely free.
This is a Python bot, which automates logging in, purchasing and planting the seeds. Open source bot and completely free.

🌻 Sunflower Land Bot 🌻 ⚠️ Warning I am not responsible for any penalties incurred by those who use the bot, use it at your own risk. This BOT is com

alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API.

alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API. It allows rapid trading algo development easily, with support for both REST and streaming data interfaces

🚧 finCLI's own News API. No more limited API calls. Unlimited credible and latest information on BTC, Ethereum, Indian and Global Finance.
🚧 finCLI's own News API. No more limited API calls. Unlimited credible and latest information on BTC, Ethereum, Indian and Global Finance.

🚧 finCLI's own News API. No more limited API calls. Unlimited credible and latest information on BTC, Ethereum, Indian and Global Finance.

:globe_with_meridians: A Python wrapper for the Geocodio geolocation service API

Py-Geocodio Python wrapper for Geocodio geocoding API. Full documentation on Read the Docs. If you are upgrading from a version prior to 0.2.0 please

Python client for Toyota North America service API

toyota-na Python client for Toyota North America service API Install pip install toyota-na[qt] [qt] is required for generating authorization code. Us

An API wrapper for the file.io web service.

🗃️ File.io An API wrapper for the file.io web service. Install $ pip3 install fileio or

Comments
  • Suggest to loosen the dependency on databases

    Suggest to loosen the dependency on databases

    Hi, your project universities requires "databases==0.3.2" in its dependency. After analyzing the source code, we found that some other versions of databases can also be suitable without affecting your project, i.e., databases 0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.3.0, 0.3.1. Therefore, we suggest to loosen the dependency on databases from "databases==0.3.2" to "databases>=0.2.2,<=0.3.2" to avoid any possible conflict for importing more packages or for downstream projects that may use universities.

    May I pull a request to loosen the dependency on databases?

    By the way, could you please tell us whether such dependency analysis may be potentially helpful for maintaining dependencies easier during your development?



    For your reference, here are details in our analysis.

    Your project universities(commit id: 8d77973ea5e5d6e077329b29ffdb798ab6c1f9ff) directly uses 1 APIs from package databases.

    databases.core.Database.__init__
    
    

    From which, 6 functions are then indirectly called, including 3 databases's internal APIs and 3 outsider APIs, as follows (neglecting some repeated function occurrences).

    [/ycd/universities]
    +--databases.core.Database.__init__
    |      +--databases.core.DatabaseURL.__init__
    |      +--databases.importer.import_from_string
    |      |      +--databases.importer.ImportFromStringError.__init__
    |      |      +--importlib.import_module
    |      +--aiocontextvars.ContextVar
    |      +--contextvars.ContextVar
    

    We scan databases's versions among [0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.3.0, 0.3.1] and 0.3.2, the changing functions (diffs being listed below) have none intersection with any function or API we mentioned above (either directly or indirectly called by this project).

    diff: 0.3.2(original) 0.2.2
    ['databases.backends.postgres.Record.__iter__', 'databases.backends.aiopg.AiopgConnection.transaction', 'databases.core.DatabaseURL.scheme', 'databases.backends.postgres.PostgresBackend._get_dialect', 'databases.core.DatabaseURL.database', 'databases.backends.aiopg.AiopgTransaction.rollback', 'databases.backends.aiopg.AiopgConnection', 'databases.backends.aiopg.AiopgTransaction', 'databases.core.DatabaseURL.replace', 'databases.core.Connection', 'databases.backends.aiopg.AiopgBackend.connect', 'databases.core.Database.force_rollback', 'databases.core.DatabaseURL.__repr__', 'databases.core.Database.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_all', 'databases.backends.aiopg.AiopgConnection._compile', 'databases.backends.aiopg.CompilationContext.__init__', 'databases.core.Connection.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_one', 'databases.backends.aiopg.AiopgConnection.__init__', 'databases.backends.aiopg.CompilationContext', 'databases.backends.postgres.PostgresConnection._compile', 'databases.backends.sqlite.SQLiteConnection', 'databases.backends.aiopg.AiopgConnection.release', 'databases.backends.postgres.PostgresConnection', 'databases.backends.sqlite.SQLiteBackend', 'databases.backends.postgres.Record.__len__', 'databases.core.Connection.__init__', 'databases.backends.aiopg.AiopgBackend', 'databases.core.DatabaseURL', 'databases.backends.aiopg.AiopgBackend.__init__', 'databases.backends.aiopg.AiopgTransaction.__init__', 'databases.backends.aiopg.AiopgBackend._get_connection_kwargs', 'databases.backends.aiopg.AiopgBackend.disconnect', 'databases.core.Database', 'databases.backends.aiopg.AiopgConnection.execute_many', 'databases.backends.postgres.Record.values', 'databases.backends.aiopg.AiopgConnection.execute', 'databases.core.Transaction', 'databases.backends.aiopg.AiopgConnection.iterate', 'databases.backends.aiopg.AiopgTransaction.start', 'databases.core.DatabaseURL.obscure_password', 'databases.backends.aiopg.AiopgConnection.acquire', 'databases.core.Transaction.__init__', 'databases.backends.aiopg.AiopgConnection.raw_connection', 'databases.backends.aiopg.AiopgBackend._get_dialect', 'databases.backends.postgres.Record', 'databases.backends.aiopg.AiopgBackend.connection', 'databases.backends.mysql.MySQLConnection', 'databases.backends.aiopg.AiopgTransaction.commit', 'databases.backends.mysql.MySQLBackend', 'databases.backends.postgres.PostgresBackend']
    
    diff: 0.3.2(original) 0.2.3
    ['databases.backends.postgres.Record.__iter__', 'databases.backends.aiopg.AiopgConnection.transaction', 'databases.core.DatabaseURL.scheme', 'databases.core.DatabaseURL.database', 'databases.backends.aiopg.AiopgTransaction.rollback', 'databases.backends.aiopg.AiopgConnection', 'databases.backends.aiopg.AiopgTransaction', 'databases.core.DatabaseURL.replace', 'databases.core.Connection', 'databases.backends.aiopg.AiopgBackend.connect', 'databases.core.Database.force_rollback', 'databases.core.DatabaseURL.__repr__', 'databases.core.Database.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_all', 'databases.backends.aiopg.AiopgConnection._compile', 'databases.backends.aiopg.CompilationContext.__init__', 'databases.core.Connection.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_one', 'databases.backends.aiopg.AiopgConnection.__init__', 'databases.backends.aiopg.CompilationContext', 'databases.backends.postgres.PostgresConnection._compile', 'databases.backends.sqlite.SQLiteConnection', 'databases.backends.aiopg.AiopgConnection.release', 'databases.backends.postgres.PostgresConnection', 'databases.backends.postgres.Record.__len__', 'databases.backends.aiopg.AiopgBackend', 'databases.core.DatabaseURL', 'databases.backends.aiopg.AiopgBackend.__init__', 'databases.backends.aiopg.AiopgTransaction.__init__', 'databases.backends.aiopg.AiopgBackend._get_connection_kwargs', 'databases.backends.aiopg.AiopgBackend.disconnect', 'databases.core.Database', 'databases.backends.aiopg.AiopgConnection.execute_many', 'databases.backends.postgres.Record.values', 'databases.backends.aiopg.AiopgConnection.execute', 'databases.core.Transaction', 'databases.backends.aiopg.AiopgConnection.iterate', 'databases.backends.aiopg.AiopgTransaction.start', 'databases.core.DatabaseURL.obscure_password', 'databases.backends.aiopg.AiopgConnection.acquire', 'databases.core.Transaction.__init__', 'databases.backends.aiopg.AiopgConnection.raw_connection', 'databases.backends.aiopg.AiopgBackend._get_dialect', 'databases.backends.postgres.Record', 'databases.backends.aiopg.AiopgBackend.connection', 'databases.backends.mysql.MySQLConnection', 'databases.backends.aiopg.AiopgTransaction.commit']
    
    diff: 0.3.2(original) 0.2.4
    ['databases.backends.postgres.Record.__iter__', 'databases.backends.aiopg.AiopgConnection.transaction', 'databases.core.DatabaseURL.scheme', 'databases.backends.aiopg.AiopgTransaction.rollback', 'databases.backends.aiopg.AiopgConnection', 'databases.backends.aiopg.AiopgTransaction', 'databases.core.DatabaseURL.replace', 'databases.core.Connection', 'databases.backends.aiopg.AiopgBackend.connect', 'databases.core.Database.force_rollback', 'databases.core.DatabaseURL.__repr__', 'databases.core.Database.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_all', 'databases.backends.aiopg.AiopgConnection._compile', 'databases.backends.aiopg.CompilationContext.__init__', 'databases.core.Connection.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_one', 'databases.backends.aiopg.AiopgConnection.__init__', 'databases.backends.aiopg.CompilationContext', 'databases.backends.postgres.PostgresConnection._compile', 'databases.backends.sqlite.SQLiteConnection', 'databases.backends.aiopg.AiopgConnection.release', 'databases.backends.postgres.PostgresConnection', 'databases.backends.postgres.Record.__len__', 'databases.backends.aiopg.AiopgBackend', 'databases.core.DatabaseURL', 'databases.backends.aiopg.AiopgBackend.__init__', 'databases.backends.aiopg.AiopgTransaction.__init__', 'databases.backends.aiopg.AiopgBackend._get_connection_kwargs', 'databases.backends.aiopg.AiopgBackend.disconnect', 'databases.core.Database', 'databases.backends.aiopg.AiopgConnection.execute_many', 'databases.backends.postgres.Record.values', 'databases.backends.aiopg.AiopgConnection.execute', 'databases.core.Transaction', 'databases.backends.aiopg.AiopgConnection.iterate', 'databases.backends.aiopg.AiopgTransaction.start', 'databases.core.DatabaseURL.obscure_password', 'databases.backends.aiopg.AiopgConnection.acquire', 'databases.core.Transaction.__init__', 'databases.backends.aiopg.AiopgConnection.raw_connection', 'databases.backends.aiopg.AiopgBackend._get_dialect', 'databases.backends.postgres.Record', 'databases.backends.aiopg.AiopgBackend.connection', 'databases.backends.mysql.MySQLConnection', 'databases.backends.aiopg.AiopgTransaction.commit']
    
    diff: 0.3.2(original) 0.2.5
    ['databases.core.DatabaseURL.scheme', 'databases.backends.aiopg.AiopgConnection.transaction', 'databases.backends.aiopg.AiopgTransaction.rollback', 'databases.backends.aiopg.AiopgConnection', 'databases.backends.aiopg.AiopgTransaction', 'databases.core.DatabaseURL.replace', 'databases.core.Connection', 'databases.backends.aiopg.AiopgBackend.connect', 'databases.core.Database.force_rollback', 'databases.core.DatabaseURL.__repr__', 'databases.core.Database.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_all', 'databases.backends.aiopg.AiopgConnection._compile', 'databases.backends.aiopg.CompilationContext.__init__', 'databases.core.Connection.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_one', 'databases.backends.aiopg.AiopgConnection.__init__', 'databases.backends.aiopg.CompilationContext', 'databases.backends.postgres.PostgresConnection._compile', 'databases.backends.sqlite.SQLiteConnection', 'databases.backends.aiopg.AiopgConnection.release', 'databases.backends.postgres.PostgresConnection', 'databases.backends.aiopg.AiopgBackend', 'databases.core.DatabaseURL', 'databases.backends.aiopg.AiopgBackend.__init__', 'databases.backends.aiopg.AiopgTransaction.__init__', 'databases.backends.aiopg.AiopgBackend._get_connection_kwargs', 'databases.backends.aiopg.AiopgBackend.disconnect', 'databases.core.Database', 'databases.backends.aiopg.AiopgConnection.execute_many', 'databases.backends.postgres.Record.values', 'databases.backends.aiopg.AiopgConnection.execute', 'databases.core.Transaction', 'databases.backends.aiopg.AiopgConnection.iterate', 'databases.backends.aiopg.AiopgTransaction.start', 'databases.core.DatabaseURL.obscure_password', 'databases.backends.aiopg.AiopgConnection.acquire', 'databases.core.Transaction.__init__', 'databases.backends.aiopg.AiopgConnection.raw_connection', 'databases.backends.aiopg.AiopgBackend._get_dialect', 'databases.backends.postgres.Record', 'databases.backends.aiopg.AiopgBackend.connection', 'databases.backends.mysql.MySQLConnection', 'databases.backends.aiopg.AiopgTransaction.commit']
    
    diff: 0.3.2(original) 0.2.6
    ['databases.core.DatabaseURL.scheme', 'databases.backends.aiopg.AiopgConnection.transaction', 'databases.backends.aiopg.AiopgTransaction.rollback', 'databases.backends.aiopg.AiopgConnection', 'databases.backends.aiopg.AiopgTransaction', 'databases.core.DatabaseURL.replace', 'databases.core.Connection', 'databases.backends.aiopg.AiopgBackend.connect', 'databases.core.Database.force_rollback', 'databases.core.Database.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_all', 'databases.backends.aiopg.AiopgConnection._compile', 'databases.backends.aiopg.CompilationContext.__init__', 'databases.core.Connection.transaction', 'databases.backends.aiopg.AiopgConnection.fetch_one', 'databases.backends.aiopg.AiopgConnection.__init__', 'databases.backends.aiopg.CompilationContext', 'databases.backends.sqlite.SQLiteConnection', 'databases.backends.aiopg.AiopgConnection.release', 'databases.backends.aiopg.AiopgBackend', 'databases.core.DatabaseURL', 'databases.backends.aiopg.AiopgBackend.__init__', 'databases.backends.aiopg.AiopgTransaction.__init__', 'databases.backends.aiopg.AiopgBackend._get_connection_kwargs', 'databases.backends.aiopg.AiopgBackend.disconnect', 'databases.core.Database', 'databases.backends.aiopg.AiopgConnection.execute_many', 'databases.backends.postgres.Record.values', 'databases.backends.aiopg.AiopgConnection.execute', 'databases.core.Transaction', 'databases.backends.aiopg.AiopgConnection.iterate', 'databases.backends.aiopg.AiopgTransaction.start', 'databases.backends.aiopg.AiopgConnection.acquire', 'databases.core.Transaction.__init__', 'databases.backends.aiopg.AiopgConnection.raw_connection', 'databases.backends.aiopg.AiopgBackend._get_dialect', 'databases.backends.postgres.Record', 'databases.backends.aiopg.AiopgBackend.connection', 'databases.backends.mysql.MySQLConnection', 'databases.backends.aiopg.AiopgTransaction.commit']
    
    diff: 0.3.2(original) 0.3.0
    ['databases.backends.postgres.Record.values', 'databases.core.Transaction', 'databases.core.Database.transaction', 'databases.core.Transaction.__init__', 'databases.core.DatabaseURL', 'databases.backends.postgres.Record', 'databases.core.Connection.transaction', 'databases.core.Database', 'databases.core.DatabaseURL.replace', 'databases.core.Connection']
    
    diff: 0.3.2(original) 0.3.1
    ['databases.backends.postgres.Record.values', 'databases.core.DatabaseURL', 'databases.backends.postgres.Record', 'databases.core.DatabaseURL.replace', 'databases.core.Connection']
    
    

    As for other packages, the APIs of @outside_package_name are called by databases in the call graph and the dependencies on these packages also stay the same in our suggested versions, thus avoiding any outside conflict.

    Therefore, we believe that it is quite safe to loose your dependency on databases from "databases==0.3.2" to "databases>=0.2.2,<=0.3.2". This will improve the applicability of universities and reduce the possibility of any further dependency conflict with other projects/packages.

    opened by Agnes-U 0
  • Bump fastapi from 0.60.2 to 0.65.2

    Bump fastapi from 0.60.2 to 0.65.2

    Bumps fastapi from 0.60.2 to 0.65.2.

    Release notes

    Sourced from fastapi's releases.

    0.65.2

    Security fixes

    This change fixes a CSRF security vulnerability when using cookies for authentication in path operations with JSON payloads sent by browsers.

    In versions lower than 0.65.2, FastAPI would try to read the request payload as JSON even if the content-type header sent was not set to application/json or a compatible JSON media type (e.g. application/geo+json).

    So, a request with a content type of text/plain containing JSON data would be accepted and the JSON data would be extracted.

    But requests with content type text/plain are exempt from CORS preflights, for being considered Simple requests. So, the browser would execute them right away including cookies, and the text content could be a JSON string that would be parsed and accepted by the FastAPI application.

    See CVE-2021-32677 for more details.

    Thanks to Dima Boger for the security report! 🙇🔒

    Internal

    0.65.1

    Security fixes

    0.65.0

    Breaking Changes - Upgrade

    • ⬆️ Upgrade Starlette to 0.14.2, including internal UJSONResponse migrated from Starlette. This includes several bug fixes and features from Starlette. PR #2335 by @​hanneskuettner.

    Translations

    Internal

    0.64.0

    Features

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(0.1.0)
Python bindings for Alexa Web Information Service (AWIS) API

Attention! This package is no longer maintained. See this ticket for more info. Wraps Alexa Web Information Service. Usage Making UrlInfo requests: ap

Atamert Ölçgen 51 Feb 12, 2022
Free and Open Source Machine Translation API. 100% self-hosted, no limits, no ties to proprietary services. Built on top of Argos Translate.

LibreTranslate Try it online! | API Docs Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on pro

UAV4GEO 3.5k Jan 3, 2023
(unofficial) Googletrans: Free and Unlimited Google translate API for Python. Translates totally free of charge.

Googletrans Googletrans is a free and unlimited python library that implemented Google Translate API. This uses the Google Translate Ajax API to make

Suhun Han 3.2k Jan 4, 2023
thumbor is an open-source photo thumbnail service by globo.com

Survey If you use thumbor, please take 1 minute and answer this survey? It's only 2 questions and one is multiple choice!!! thumbor is a smart imaging

Thumbor (by @globocom) 9.3k Dec 31, 2022
Design and build a wrapper for the Open Weather API current weather data service

Design and build a wrapper for the Open Weather API current weather data service that returns a city's temperature, with caching, also allowing for the temperature of the latest queried cities that are still validly cached to be retrieved.

Duan Rafael Ribeiro 1 Jun 27, 2022
Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and other financial information. This repository provides an SDK for developing applications to access the NCDS.

Nasdaq Cloud Data Service (NCDS) Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and ot

Nasdaq 8 Dec 1, 2022
A free and open-source discord webhook spammer.

Discord-Webhook-Spammer A free and open-source discord webhook spammer. Usage Depending on your python installation your commands may vary. Below are

null 3 Sep 8, 2021
Free and Open Source Channel/Group Voice chat music player for telegram ❤️ with button support Heroku Commands

ZeusMusic Requirements ?? FFmpeg NodeJS nodesource.com Python 3.7 or higher PyTgCalls MongoDB 2nd Telegram Account (needed for userbot) ?? Get SESSION

ZeusNetwork 4 Jan 3, 2022
Freqtrade is a free and open source crypto trading bot written in Python.

Freqtrade is a free and open source crypto trading bot written in Python. It is designed to support all major exchanges and be controlled via Telegram. It contains backtesting, plotting and money management tools as well as strategy optimization by machine learning.

Kazune Takeda 5 Dec 30, 2021