Как авторизоваться в аккаунте (гугла) чтобы парсить с него данные

Рейтинг: -1Ответов: 1Опубликовано: 18.03.2023

Я хочу парсить баланс с гугл консоли (но перед парсингом нужна авторизация в учетке ) как реализовать .

public class MainActivity extends AppCompatActivity {
    private ArrayAdapter<String> adapter;

    private ListView lv;
    public Elements content;
    public ArrayList<String> titleList = new ArrayList<String>();



    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


            lv = (ListView) findViewById(R.id.view);

            adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.pro_item, titleList);

        new NewThread().execute();
    }



    public class NewThread extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... arg) {
            Document doc;
            try {


                doc = Jsoup.connect("https://play.google.com/console/u/0/developers/0000000000000000000/paymentssettings").maxBodySize(0).get();
                content = doc.getElementsByClass("b3-balance-card-headline");

                titleList.clear();

                for (Element contents : content) {
                    titleList.add(contents.text());
                }

            }
            catch (IOException e)
            { e.printStackTrace(); }

            catch (Exception e)
            {}

            return null;
        }


        @Override
        protected void onPostExecute(String result) {


                lv.setAdapter(adapter);

                //int count = lv.getCount();
                lv.setEnabled(true);

                String row = adapter.getItem(0);

                }}




    }

//

Логи ошибки

    --------- beginning of crash
2023-03-18 16:51:11.126 32313-32313/shop.Console.Profit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: shop.Console.Profit, PID: 32313
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:437)
        at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:394)
        at shop.Console.Profit.MainActivity$NewThread.onPostExecute(MainActivity.java:81)
        at shop.Console.Profit.MainActivity$NewThread.onPostExecute(MainActivity.java:45)
        at android.os.AsyncTask.finish(AsyncTask.java:771)
        at android.os.AsyncTask.access$900(AsyncTask.java:199)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7660)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2023-03-18 16:51:11.164 32313-32313/shop.Console.Profit I/Process: Sending signal. PID: 32313 SIG: 9

Ответы

▲ 0

Весьма вероятно что будет дико сложно, т.к. гугл будет всячески мешать парсингу, в т.ч. тем, что токены будут протухать. Однако можно попробовать посмотреть по логам сетевых запросов в браузере как происходит авторизация. Скорее всего в каком-то заголовке будет cookie, который вы сможете с своему запросу прикреплять.

Однако тут в любом случае потребуется запуск авторизации через гугловое SDK (хотя и не факт что получится что-то). В крайнем случае вы можете запускать реальный или виртуальный браузер, в нём вручную авторизовываться и парсить загруженную бразузером страницу.

Скорее всего так и придётся делать, т.к. весьма вероятно, что данные подгружаются динамически и JSOUP тут поможет только парсить HTML, а не получать его.


Скорее всего вы вообще не потому пути пошли и вам надо изучить предоставлемое гуглом API. Там точно есть возможность получать совершённые юзерами покупки. Но может понадобиться сервер, т.к., вроде, покупки гугл будет слать на сервер. Ну или дико извращаться выдавая телефону статический IP.