Как извлечь части содержимого Википедии в приложение для Android?

#android #xml #mediawiki #wikipedia #wikipedia-api

#Android #xml #mediawiki #википедия #википедия-api

Вопрос:

В принципе, я хочу извлечь содержимое из википедии. Но я хочу отображать его непосредственно в своих приложениях для Android. Не сразу перенаправлять в интернет-браузер, а сначала отобразить его в моих приложениях.

В настоящее время мне удается запросить API Википедии и получить только основное содержимое с помощьюhttp://en.wikipedia.org/w/api.php?action=parseamp;prop=textamp;format=xmlamp;page=Bla_Bla_Bla . и поскольку я анализирую данные, я буду использовать WebView для рендеринга в Android. Он успешно отрисован. Но только для тех незащищенных статей…

Если оно защищено, например, как Мона Лиза, вывод не был отображен должным образом в WebView Android.

Я хочу знать, пытался ли кто-нибудь извлекать содержимое Википедии и отображать его в своих приложениях для Android легко и красиво?

Спасибо 🙂

Ответ №1:

Мне удалось найти ответ. Я думаю, что я слишком усложнил эту вещь. На самом деле мы можем прекрасно извлекать содержимое без вызова mediawiki API.
Википедия уже предоставляет мобильный интерфейс.

Мне просто нужно использовать WebView для загрузкиhttp://en.m.wikipedia.org/wiki / и добавьте тему в конце URL.
Например, сайт Mona Lisa: https://en.m.wikipedia.org/wiki/Mona_Lisa

Ссылки:http://en.wikipedia.org/wiki/Help:Mobile_access#Official_online_version

Ответ №2:

Я бы, вероятно, извлек json-версию вызова api (с format= json в uri запроса). Вам удалось заставить извлечение данных (я полагаю, с помощью HttpPost или HttpGet) работать, так что теперь вопрос только в извлечении правильных данных для использования в вашем приложении.

В настоящее время я пишу приложение, которое извлекает JSON с сервера, и получить содержимое действительно легко. Просто создайте экземпляр JSONObject и передайте ему результат json с сервера, затем извлеките данные с помощью методов get в объекте.

Простой пример:

 JSONObject jsonObject = new JSONObject(responseTextFromServer);
String query = jsonObject.getString("query");
// and so on...
  

Комментарии:

1. Вы правы. Но разве это не тот же вывод, что XML или JSON. кстати, мне удалось извлечь данные.

2. Учитывая, что вопрос сформулирован иначе, чем при первоначальном ответе: лучше всего отфильтровать все html-форматирование в ответе из Википедии. Похоже, что ответ имеет все форматирование, которое вы видите на обычной странице, что может стать проблемой при анализе и отображении данных.

3. Большое вам спасибо за помощь, мне удалось это решить = D

Ответ №3:

 this is main activity

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@ id/listView_phones"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>


this is second activity xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".wikipedia_search">

    <WebView
        android:id="@ id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
  

Ответ №4:

 // this is main activity code. I have added list of cars and when clicked it displays the wikipedia about it

package com.example.google_phones;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ListView listView_google_phones;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView_google_phones= (ListView)findViewById(R.id.listView_phones);
        final ArrayList<String> arrayList= new ArrayList<>();
        arrayList.add("Google Pixel");
        arrayList.add("Google Pixel XL");
        arrayList.add("Google Pixel 2");
        arrayList.add("Google Pixel 2XL");
        arrayList.add("Google Pixel 3");
        arrayList.add("Pixel_3");



         ArrayAdapter arrayAdapter= new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,arrayList);
        listView_google_phones.setAdapter(arrayAdapter);

        listView_google_phones.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent = new Intent(MainActivity.this,wikipedia_search.class);
                intent.putExtra("Phone_name", listView_google_phones.getItemAtPosition(position).toString());
                startActivity(intent);
            }
        });
    }
}

// this is second activity code when user clicks on any one of the phones

package com.example.google_phones;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class wikipedia_search extends AppCompatActivity {
 WebView webView_wiki;
 private String search_string;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wikipedia_search);

        webView_wiki= (WebView)findViewById(R.id.webView);
        webView_wiki.setWebViewClient(new WebViewClient());
        Bundle bundle=getIntent().getExtras();
        if(bundle!=null){
            webView_wiki.loadUrl("http://en.m.wikipedia.org/wiki/" bundle.getString("Phone_name"));
        }

    }
}