Closed aliok closed 4 months ago
Find users via various criteria. This method returns up to 100 results per page.
The REST API has a custom rate limit for searching. For authenticated requests, you can make up to 30 requests per minute for all search endpoints except for the "Search code" endpoint.
https://docs.github.com/en/free-pro-team@latest/rest/search/search?apiVersion=2022-11-28#rate-limit
User access token requests are limited to 5,000 requests per hour and per authenticated user.
When using GITHUB_TOKEN, the rate limit is 1,000 requests per hour per repository. https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limits-for-requests-from-github-actions
Dakikada 30 request, saatte 1800 request yapıyor, ama bu işi otomatiğe bağlatıp GitHub Actions kullanmak istersek, saatte 1000 request yapabiliriz.
Saatte en fazla 1000*100 = 100K kullanıcı çekebiliriz. Şu anda profilinde Turkey veya Türkiye yazan aşağı yukarı 100K kullanıcı var. Network ve veri işlemeyi de hesaba katarsak, 2-3 saatte bu verinin tamamını çekebiliriz.
Yani günlük veri yenilemesi mümkün. O yüzden, kullanıcıların profilini sonradan Türkiye yapması veya Türkiye iken başka birşey yapması çok da önemli değil günlük veri gelecekse.
Bu tamamlandi: http://state.opentr.foundation/
https://github.com/OpenTRFoundation/OpenTR/issues/20 görevindeki araştırmalar kullanılarak, GitHub'dan konumunu Türkiye olarak seçmiş kullanıcıları bulabiliriz.
https://docs.github.com/en/rest/search/search?apiVersion=2022-11-28#search-users adresinde kullanıcı arama API'sı ile ilgili bilgiler mevcut. Aynı zamanda https://docs.github.com/en/search-github/searching-on-github/searching-users adresinde, search query'nin detayı yazıyor.
Çıktı şeması:
Örnek çıktı:
Üstteki örnek çıktıda mevcut değil ama, şehir bazlı yer bilgisi de geliyor.
Buradan, kullanıcıları arayıp, şu bilgileri kaydedebiliriz:
Bu bilgileri kaydetmek bazen tek başına işimize yaramayacak. Çünkü, zaten şu tarz çıkarımları doğrudan sonuç sayısına bakarak, yani tek tek tüm kullanıcıları çekmeden de yapabiliriz:
Ancak, alt kırılımlar yapmak istediğimizde, tüm kombinasyonları tek tek aramak yerine, tüm kullanıcıları çekip, sonra da bu bilgileri kullanarak alt kırılımlar yapmak daha mantıklı olabilir. Örneğin, GitHub'ın Türkiye içinde gösterdiği yer bilgileri nedir bilmiyoruz. Ülke bazında mı, il bazında mı, ilçe bazında mı? Bu sayede şu tarz çıkarımları da yapabiliriz:
Son olarak, GraphQL API'sindeki kısıtlamalar nedeniyle, kullanıcıların bilgilerini tek tek çekmemiz gerekecek. Çünkü GraphQL API'sinde, kullanıcı arama sonuçları hep star sayısına göre sıralı geliyor. Yani, t=0'da arattığımızda gelen kullanıcının star sayısı t=1'de değişirse, tekrar karşımıza çıkabilir. Ya da, tam tersi olarak hiç karşımıza çıkmayabilir.
Yeni kullanıcıları çekmek için bir process
GitHub Actions kullanan ve rate limit olayını hesapa katan process
Sorunlar:
Profil update zamanına bakan aşağıdaki process bunu çözerTüm kişiler çekildikten sonra, yeni listede bu kişiler kalmayacak