1

私はウィキペディアの JSON API を使用しており、たとえば、リンクなしでページのコンテンツを取得しています。

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=May_21&prop=revisions&rvprop=content&rvsection=1

例えば:

[[293]] – Roman Emperors [[Diocletian]] and [[Maximian]] appoint [[Galerius]] as [[Caesar (title)|''Caesar'']] to Diocletian, beginning the period of four rulers known as the [[Tetrarchy]].

&ndashと置き換えます-

[[Caesar (title)|''Caesar'']]する必要がありますCaesar

Objective-Cを使用しています

リンク文字なしで同じページ コンテンツを取得するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

2

HTML からテキストへのコンバーター (リンクやPhantomJSなどのブラウザー シミュレーターなど) を使用します。ウィキテキストをテキストに変換するよりもはるかに手間がかかりません。その場合、テンプレートを処理する必要があります。

于 2012-05-22T06:52:51.163 に答える
1

それはあるべきです:-)

NSString * stringToParse = @"{\"query\":{\"normalized\":[{\"from\":\"May_21\",\"to\":\"May 21\"}],\"pages\":{\"19684\":{\"pageid\":19684,\"ns\":0,\"title\":\"May 21\",\"revisions\":[{\"*\":\"==Events==\\n* [[293]] – Roman Emperors [[Diocletian]] and [[Maximian]] appoint [[Galerius]] as [[Caesar (title)|''Caesar'']] to Diocletian, beginning the period of four rulers known as the [[Tetrarchy]].\\n* [[878]] – [[Syracuse, Italy]], is [[Muslim conquest of Sicily|captured]] by the ...";

//Replace &ndash with -
stringToParse = [stringToParse stringByReplacingOccurrencesOfString:@"&ndash" withString:@"-"];

//[[Caesar (title)|''Caesar'']] Should be Caesar
//and [[Maximian]] should be Maximian
//same for [[1972]] -> 1972
NSString *regexToReplaceWikiLinks = @"\\[\\[([A-Za-z0-9_ ()]+?\\|)?(\\'\\')?(.+?)(\\'\\')?\\]\\]";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexToReplaceWikiLinks
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

// attention, the found expression is replacex with the third parenthesis
NSString *modifiedString = [regex stringByReplacingMatchesInString:stringToParse
                                                           options:0
                                                             range:NSMakeRange(0, [stringToParse length])
                                                      withTemplate:@"$3"];

NSLog(@"%@", modifiedString);

結果:

{"query":{"normalized":[{"from":"May_21","to":"May 21"}],"pages":{"19684":{"pageid":19684,"ns":0,"title":"May 21","revisions":[{"*":"==Events==\n* 293 -; Roman Emperors Diocletian and Maximian appoint Galerius as Caesar to Diocletian, beginning the period of four rulers known as the Tetrarchy.\n* 878 -; Syracuse, Italy, is captured by the ...
于 2012-05-27T15:14:15.070 に答える
0

正規表現は、これを解決するための方法です。これはJavaScriptを使用した例です(ただし、正規表現を使用する任意の言語に同じソリューションを適用できます)。

<dl>
    <script type="text/javascript">

        var source = "[[293]] &ndash; Roman Emperors [[Diocletian]] and [[Maximian]] appoint [[Galerius]] as [[Caesar (title)|''Caesar'']] to Diocletian, beginning the period of four rulers known as the [[Tetrarchy]].";

        document.writeln('<dt> Original </dt>');
        document.writeln('<dd>' + source + '</dd>');

        // Replace links with any found titles
        var matchTitles = /\[\[([^\]]+?)\|\'\'(.+?)\'\']\]/ig; /* <- Answer */
        source = source.replace(matchTitles, '$2');

        document.writeln('<dt> First Pass </dt>');
        document.writeln('<dd style="color: green;">' + source + '</dd>');

        // Replace links with contents
        var matchLinks = /\[\[(.+?)\]\]/ig;
        source = source.replace(matchLinks, '$1');

        document.writeln('<dt> Second Pass </dt>');
        document.writeln('<dd>' + source + '</dd>');
    </script>
</dl>

これがここで機能していることも確認できます:http://jsfiddle.net/NujmB/

于 2012-05-24T08:40:06.627 に答える
0

私は目的の C を知りませんが、これは私が同じ目的で使用している JavaScript のコードです
(これは疑似コードとして機能し、JavaScript から他のユーザーを助けることができます)。

 var url = 'http://en.wikipedia.org/w/api.php?callback=?&action=parse&page=facebook&prop=text&format=json&section=0';
     // Section = 0 for taking first section of wiki page i.e. introduction only     
            $.getJSON(url,function(response){
                // Taking only the first paragraph from introduction
                var intro = $(response.parse.text['*']).filter('p:eq(0)').html();
                var wikiBox = $('#wikipediaBox .wikipedia div.overview');
                wikiBox.empty().html(intro);
                // Converting relative links into absolute ones and links into outer links
                wikiBox.find("a:not(.references a)").attr("href", function(){ return "http://www.wikipedia.org" + $(this).attr("href");});
                wikiBox.find("a").attr("target", "_blank");
                // Removing edits markers
                wikiBox.find('sup.reference').remove(); 
            });
于 2012-05-25T15:49:20.480 に答える